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 vC = data.velocities[_indexC].v;
var wC = data.velocities[_indexC].w;
final vD = data.velocities[_indexD].v;
var wD = data.velocities[_indexD].w;
final temp1 = Vector2.zero();
final temp2 = Vector2.zero();
var cDot = _jvAC.dot(
temp1
..setFrom(vA)
..sub(vC),
) +
_jvBD.dot(
temp2
..setFrom(vB)
..sub(vD),
);
cDot += (_jwA * wA - _jwC * wC) + (_jwB * wB - _jwD * wD);
final impulse = -_mass * cDot;
_impulse += impulse;
vA.x += (_mA * impulse) * _jvAC.x;
vA.y += (_mA * impulse) * _jvAC.y;
wA += _iA * impulse * _jwA;
vB.x += (_mB * impulse) * _jvBD.x;
vB.y += (_mB * impulse) * _jvBD.y;
wB += _iB * impulse * _jwB;
vC.x -= (_mC * impulse) * _jvAC.x;
vC.y -= (_mC * impulse) * _jvAC.y;
wC -= _iC * impulse * _jwC;
vD.x -= (_mD * impulse) * _jvBD.x;
vD.y -= (_mD * impulse) * _jvBD.y;
wD -= _iD * impulse * _jwD;
// data.velocities[_indexA].v = vA;
data.velocities[_indexA].w = wA;
// data.velocities[_indexB].v = vB;
data.velocities[_indexB].w = wB;
// data.velocities[_indexC].v = vC;
data.velocities[_indexC].w = wC;
// data.velocities[_indexD].v = vD;
data.velocities[_indexD].w = wD;
}