11.11 The Method of Separating Axes 611
tion methods (Sederberg and Nishita 1991). Detection of closed loops has proven
more problematic; most approaches use Gauss maps for bounding and simply sub-
divide the surface until “sufficient conditions for the non-existence of loops are sat-
isfied” (Krishnan and Manocha 1997).
The second major issue for tracing methods is this: once the start point(s) are
identified, most algorithms use a variant of Newton’s method to do the actual tracing.
However, in practice the step size must be kept very small to avoid what is referred to
as component jumping. The result is that this operation can be very slow. Relatively
more recent work by Krishnan and Manocha (1997) has addressed these significant
issues with a good deal of success.
11.11 The Method of Separating Axes
The concept of separating axes in three dimensions is identical to that of two dimen-
sions in Section 7.7. Two stationary convex objects do not intersect if there exists
a line for which the projections of the objects onto that line do not intersect. The
method applies to moving convex objects, and the geometric queries test-intersection
and find-intersection can be formulated just as in two dimensions.
11.11.1 Separation of Stationary Convex Polyhedra
In two dimensions we concentrated our efforts on convex polygons. In three dimen-
sions we focus on convex polyhedra, but particular attention must be given to the
case when both polyhedra are really planar polygons. For a pair of convex polyhedra,
only a finite set of direction vectors needs to be considered for separation tests. This
is analogous to the two-dimensional problem with convex polygons, but we do not
provide a proof of the claim in three dimensions. The intuition, however, is similar
to that of convex polygons in two dimensions. If the two polyhedra are just touching
with no interpenetration, the contact is one of face-face, face-edge, face-vertex, edge-
edge, edge-vertex, or vertex-vertex. The set of potential directions that capture these
types of contact includes the normal vectors to the faces of the polyhedra and vectors
generatedbyacrossproductoftwoedges,onefromeachpolyhedron.
Let C
j
for j = 0, 1 be the convex polyhedra with vertices {V
(j)
i
}
N
j
−1
i=0
, edges
{e
(j)
i
}
M
j
−1
i=0
, and faces {F
(j)
i
}
L
j
−1
i=0
. Let the faces be planar convex polygons whose ver-
tices are counterclockwise ordered as you view the face from outside the polyhedron.
Outward-pointing normal vectors can be stored with each face as a way of storing the
orientation. We assume that each face has queries that allow access to the face normal
and to vertices on the face. We assume that each edge has a query that allows access
to its vertices.
The pseudocode for testing for intersection of two convex polyhedra, both having
positive volume (so L
j
≥ 4), is similar to the direct implementation in 2D: