Game Development Reference
In-Depth Information
x i = a sin h 1 [desired segment length]
a
,
+sinh x i− 1
a
y i = a cos h x i
a ,
where x is the horizontal coordinate, y is the vertical coordinate (i.e., the one
aligned with the gravity), and a is the curve's parameter. To find it, we must solve
this equation:
2 a sin h s
2 a = h
sin h tan h 1 L
where s is the horizontal distance between the endpoints, h is the vertical distance,
and L is the desired rope length. Unfortunately, it doesn't have an analytical
solution and has to be solved numerically. Small price for an ability to just know
the end result, though!
8.3 Strained Ropes
Now, what about strained ropes? We may notice that when a rope gets strained
along a line, it in essence creates a temporary constraint between the objects it's
tied to, one that is very similar to a frictionless contact (with the rope's direction
serving as a surface normal), with only two differences:
Each object has its own application point.
Instead of preventing the bodies from going towards each other, rope pre-
vents them from separating, which can be easily achieved by just choosing
the normal's direction appropriately (for instance, if contacts expect the
normal to go inside the first body, then the rope should have its “normal”
going outside).
The good thing here is that the rope can use a very large number of simulation
segments—they will never slow down the solver because it will never know about
them in the first place. Even if the number of segments is small, if they are
simulated as separate rigid bodies, they can still present a difficult heavy-light-
heavy scenario (unless they are not actually light compared to the other objects,
in which case it'll likely look wrong)—not the case with a dedicated constraint.