solveVelocityConstraints method
void
solveVelocityConstraints(
- SolverData data
)
override
Implementation
@override
void solveVelocityConstraints(SolverData data) {
final vA = data.velocities[_indexA].v;
var wA = data.velocities[_indexA].w;
final vB = data.velocities[_indexB].v;
var wB = data.velocities[_indexB].w;
final vpA = Vector2.zero();
final vpB = Vector2.zero();
// Cdot = dot(u, v + cross(w, r))
_rA.scaleOrthogonalInto(wA, vpA);
vpA.add(vA);
_rB.scaleOrthogonalInto(wB, vpB);
vpB.add(vB);
final cDot = _u.dot(vpB..sub(vpA));
final impulse = -_mass * (cDot + _bias + _gamma * _impulse);
_impulse += impulse;
final pX = impulse * _u.x;
final pY = impulse * _u.y;
vA.x -= _invMassA * pX;
vA.y -= _invMassA * pY;
wA -= _invIA * (_rA.x * pY - _rA.y * pX);
vB.x += _invMassB * pX;
vB.y += _invMassB * pY;
wB += _invIB * (_rB.x * pY - _rB.y * pX);
data.velocities[_indexA].w = wA;
data.velocities[_indexB].w = wB;
}