solvePositionConstraints method
This returns true if the position errors are within tolerance. Internal.
Implementation
@override
bool solvePositionConstraints(SolverData data) {
if (_frequencyHz > 0.0) {
return true;
}
final qA = Rot();
final qB = Rot();
final rA = Vector2.zero();
final rB = Vector2.zero();
final u = Vector2.zero();
final cA = data.positions[_indexA].c;
var aA = data.positions[_indexA].a;
final cB = data.positions[_indexB].c;
var aB = data.positions[_indexB].a;
qA.setAngle(aA);
qB.setAngle(aB);
u
..setFrom(localAnchorA)
..sub(_localCenterA);
rA.setFrom(Rot.mulVec2(qA, u));
u
..setFrom(localAnchorB)
..sub(_localCenterB);
rB.setFrom(Rot.mulVec2(qB, u));
u
..setFrom(cB)
..add(rB)
..sub(cA)
..sub(rA);
final length = u.normalize();
final C = (length - _length)
.clamp(-settings.maxLinearCorrection, settings.maxLinearCorrection);
final impulse = -_mass * C;
final pX = impulse * u.x;
final pY = impulse * u.y;
cA.x -= _invMassA * pX;
cA.y -= _invMassA * pY;
aA -= _invIA * (rA.x * pY - rA.y * pX);
cB.x += _invMassB * pX;
cB.y += _invMassB * pY;
aB += _invIB * (rB.x * pY - rB.y * pX);
data.positions[_indexA].a = aA;
data.positions[_indexB].a = aB;
return C.abs() < settings.linearSlop;
}