updateStatistics method
void
updateStatistics()
Implementation
void updateStatistics() {
if (_timestamp != _system.timestamp) {
final m = _system.particleMass;
final mass = m * particles.length;
_center.setZero();
_linearVelocity.setZero();
for (final particle in particles) {
_center.setFrom(_center + (particle.position * m));
_linearVelocity.setFrom(_linearVelocity + (particle.velocity * m));
}
if (mass > 0) {
_center.x *= 1 / mass;
_center.y *= 1 / mass;
_linearVelocity.x *= 1 / mass;
_linearVelocity.y *= 1 / mass;
}
_inertia = 0.0;
_angularVelocity = 0.0;
for (final particle in particles) {
final position = particle.position;
final velocity = particle.velocity;
final px = position.x - _center.x;
final py = position.y - _center.y;
final vx = velocity.x - _linearVelocity.x;
final vy = velocity.y - _linearVelocity.y;
_inertia += m * (px * px + py * py);
_angularVelocity += m * (px * vy - py * vx);
}
if (_inertia > 0) {
_angularVelocity *= 1 / _inertia;
}
_timestamp = _system.timestamp;
}
}