solvePositionConstraints method
This returns true if the position errors are within tolerance. Internal.
Implementation
@override
bool solvePositionConstraints(SolverData data) {
final cA = data.positions[_indexA].c;
var aA = data.positions[_indexA].a;
final cB = data.positions[_indexB].c;
var aB = data.positions[_indexB].a;
final qA = Rot();
final qB = Rot();
final u = Vector2.zero();
final rA = Vector2.zero();
final rB = Vector2.zero();
final temp = Vector2.zero();
qA.setAngle(aA);
qB.setAngle(aB);
// Compute the effective masses.
temp
..setFrom(localAnchorA)
..sub(_localCenterA);
rA.setFrom(Rot.mulVec2(qA, temp));
temp
..setFrom(localAnchorB)
..sub(_localCenterB);
rB.setFrom(Rot.mulVec2(qB, temp));
u
..setFrom(cB)
..add(rB)
..sub(cA)
..sub(rA);
final length = u.normalize();
var c = length - maxLength;
c = c.clamp(0.0, 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 length - maxLength < settings.linearSlop;
}