solveSpring method

void solveSpring(
  1. TimeStep step
)

Implementation

void solveSpring(TimeStep step) {
  final springStrength = step.invDt * this.springStrength;
  for (final pair in pairBuffer) {
    if ((pair.flags & ParticleType.springParticle) != 0) {
      final particleA = pair.particleA;
      final particleB = pair.particleB;
      final pa = particleA.position;
      final pb = particleB.position;
      final dx = pb.x - pa.x;
      final dy = pb.y - pa.y;
      final r0 = pair.distance;
      var r1 = sqrt(dx * dx + dy * dy);
      r1 = r1 == 0 ? double.maxFinite : r1;
      final strength = springStrength * pair.strength;
      final fx = strength * (r0 - r1) / r1 * dx;
      final fy = strength * (r0 - r1) / r1 * dy;
      final va = particleA.velocity;
      final vb = particleB.velocity;
      va.x -= fx;
      va.y -= fy;
      vb.x += fx;
      vb.y += fy;
    }
  }
}