ArtiSynth provides support for multipoint springs and muscles, which are similar to axial springs and muscles (Sections 3.1.1 and 4.4), except that they can contain multiple via points and also wrap around obstacles. This allows the associated force directions to vary in response to obstacles and constraints in the model, which is particularly important in biomechanical models where point-to-point muscles need to wrap around anatomical structures such as bones. A schematic illustration is shown in Figure 7.1, where a single spring connects points and , while passing through a single via point and wrapping around obstacles and . Figure 7.2 shows two examples involving a rigid body with fixed via points and a spring wrapping around three rigid bodies.
As with axial springs and muscles, multipoint springs and muscles must have two points to denote their beginning and end. In between, they can have any number of via points, which are fixed locations which the spring must pass through in the specified order. Any ArtiSynth Point object may be specified as a via point, including particles and markers. The purpose of the via point is generally to direct the spring along some particular path. In particular, the path directions before and after a via point will generally be different, and forces acting on the via point will be determined by the tension in the spring (or muscle) acting along these two different directions.
Conceptually, the spring or muscle “slides” through its via points, which act analogously to virtual three dimensional pulleys. In particular, the proportional distance between via points does not remain fixed.
The tension within the spring or muscle is computed from its material, using the relation described in Sections 3.1.1 and 4.4.1, where now denotes the entire length of the spring as it passes through the via points and wraps around obstacles. The total force acting on each via point is then given by
where and are unit vectors giving the spring’s direction immediately after and before the via point (Figure 7.3).
Multipoint springs can also be made to wrap around one or more wrappable objects. Unlike via points, wrappable objects can occur in any order along the spring and wrapping only occurs when the spring and the object actually collide. Any ArtiSynth object that implements Wrappable can be used as a wrapping object (currently, only RigidBody objects implement Wrappable). The forces acting on a wrappable are those generated by the forces and acting on the points A and B where the spring makes and leaves contact with the it (Figure 7.4). These forces are given by
where are are unit vectors giving the spring’s direction immediately before A and after B. Points A and B are collectively known as the A/B points.