One alternative to the vertical decomposition is to perform a
triangulation, which yields a simplicial complex over 
 .
Figure 6.16 shows an example.  Since
.
Figure 6.16 shows an example.  Since 
 is an
open set, there are no 0-cells.  Each
 is an
open set, there are no 0-cells.  Each  -simplex (triangle) has
either one, two, or three faces, depending on how much of its boundary
is shared with
-simplex (triangle) has
either one, two, or three faces, depending on how much of its boundary
is shared with 
 .  A roadmap can be made by connecting the
samples for
.  A roadmap can be made by connecting the
samples for  -cells and
-cells and  -cells as shown in Figure
6.17.  Note that there are many ways to triangulate
-cells as shown in Figure
6.17.  Note that there are many ways to triangulate
 for a given problem.  Finding good triangulations, which for
example means trying to avoid thin triangles, is given considerable
attention in computational geometry
[129,264,302].
 for a given problem.  Finding good triangulations, which for
example means trying to avoid thin triangles, is given considerable
attention in computational geometry
[129,264,302].
How can the triangulation be computed?  It might seem tempting to run
the vertical decomposition algorithm of Section 6.2.2 and
split each trapezoid into two triangles.  Even though this leads to
triangular cells, it does not produce a simplicial complex (two
triangles could abut the same side of a triangle edge).  A naive
approach is to incrementally split faces by attempting to connect two
vertices of a face by a line segment.  If this segment does not
intersect other segments, then the split can be made.  This process
can be iteratively performed over all vertices of faces that have more
than three vertices, until a triangulation is eventually obtained.
Unfortunately, this results in an  time algorithm because
 time algorithm because
 pairs must be checked in the worst case, and each check
requires
 pairs must be checked in the worst case, and each check
requires  time to determine whether an intersection occurs with
other segments.  This can be easily reduced to
 time to determine whether an intersection occurs with
other segments.  This can be easily reduced to 
 by
performing radial sweeping.  Chapter 3 of [264]
presents an algorithm that runs in
 by
performing radial sweeping.  Chapter 3 of [264]
presents an algorithm that runs in 
 time by first
partitioning
 time by first
partitioning 
 into monotone polygons, and then efficiently triangulating each monotone polygon.
If
 into monotone polygons, and then efficiently triangulating each monotone polygon.
If 
 is simply connected, then, surprisingly, a triangulation
can be computed in linear time [190].  Unfortunately, this
algorithm is too complicated to use in practice (there are, however,
simpler algorithms for which the complexity is close to
 is simply connected, then, surprisingly, a triangulation
can be computed in linear time [190].  Unfortunately, this
algorithm is too complicated to use in practice (there are, however,
simpler algorithms for which the complexity is close to  ; see
[90] and the end of Chapter 3 of [264] for
surveys).
; see
[90] and the end of Chapter 3 of [264] for
surveys).
Steven M LaValle 2020-08-14