satisfy method

void satisfy()

Implementation

void satisfy() {
  if (isTorn) return;

  final double dx = p2.x - p1.x;
  final double dy = p2.y - p1.y;
  final double dz = p2.z - p1.z;
  final double distance = math.sqrt(dx * dx + dy * dy + dz * dz);
  if (distance < 1e-6) return;

  final double w1 = p1.isPinned ? 0.0 : 1.0;
  final double w2 = p2.isPinned ? 0.0 : 1.0;
  final double wSum = w1 + w2;
  if (wSum == 0.0) return;

  final double diff = (distance - restingDistance) / distance * stiffness;
  final double c1 = diff * w1 / wSum;
  final double c2 = diff * w2 / wSum;

  p1.x += dx * c1;
  p1.y += dy * c1;
  p1.z += dz * c1;
  p2.x -= dx * c2;
  p2.y -= dy * c2;
  p2.z -= dz * c2;
}