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