ArtiSynth provides support for multipoint springs and muscles, which
are similar to axial springs and muscles (Sections
3.1.1 and 4.5), 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 9.1, where a
single spring connects points and
, while passing through
a single via point
and wrapping around obstacles
and
. Figure 9.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.5.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 9.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 9.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.