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;
  }
}