solveRigid method
Implementation
void solveRigid(TimeStep step) {
for (final group in groupBuffer) {
if ((group.groupFlags & ParticleGroupType.rigidParticleGroup) != 0) {
group.updateStatistics();
final temp = _tempVec;
final rotation = _tempRot;
rotation.setAngle(step.dt * group.angularVelocity);
final cross = Rot.mulVec2(rotation, group.center);
temp
..setFrom(group.linearVelocity)
..scale(step.dt)
..add(group.center)
..sub(cross);
_tempXf.p.setFrom(temp);
_tempXf.q.setFrom(rotation);
group.transform.setFrom(Transform.mul(_tempXf, group.transform));
final velocityTransform = _tempXf2
..p.x = step.invDt * _tempXf.p.x
..p.y = step.invDt * _tempXf.p.y
..q.sin = step.invDt * _tempXf.q.sin
..q.cos = step.invDt * (_tempXf.q.cos - 1);
for (final particle in group.particles) {
particle.velocity.setFrom(
Transform.mulVec2(velocityTransform, particle.position),
);
}
}
}
}