AMS 345/CSE 355 Computational

Triangulation Algorithms

Joe Mitchell

Some figures: [O’Rourke]: in C: Chap 2 Triangulation

 Input: Set S of n points

 Input: Other

Simple Planar Straight-Line Graph (PSLG) Polygon with holes

 3D: Surfaces and solids (tetrahedralization) 2 Triangulation applet for simple Simple Polygons

 Definition: A simple polygon P is the (closed) region bounded by a “simple closed polygonal ”. Simple Polygon

 Definition in [O’Rourke]: Simple Polygons

 Alternate Definition: P is a simple polygon if it is a simply connected (i.e., no “holes”) subset of the whose boundary consists of a connected finite union of straight line segments. Simple Polygons Some definitions would allow this as a “degenerate” simple polygon Definitions: Visibility, Diagonals

 For p,q in P, p is visible to q if segment pq lies within (closed) P

p q Definitions: Visibility, Diagonals

 For p,q in P, p is visible to q if segment pq lies within (closed) P

 p is clearly visible to q if p is visible to q AND the only points in common between pq and P are possibly p and q

p clearly sees q but does not clearly see q’ p p sees q’ q q’ Definitions: Visibility, Diagonals

 vivj is a diagonal if vi and vj are vertices that clearly see each other (versus: chord pq, with p and q on the boundary of P)

q

v vj m p vi pq is a chord (not a vk diagonal) vivj is a diagonal vkvm is not a diagonal Diagonals

[Devadoss-O’Rourke] Triangulation

 Definition: A partition of P into by a set of noncrossing diagonals. (= a partition of P by a maximal set of noncrossing diagonals)

[Devadoss-O’Rourke] Triangulation Theory in 2D

 Thm: A simple polygon has a triangulation.Also with holes • Lem: An n-gon with n4 has a diagonal. But, NOT true in 3D!

 Thm: Any triangulation of a simple n-gon has n-3 diagonals, n-2 triangles.

 Thm: The “dual” graph is a tree.

 Thm: An n-gon with n4 has 2 “ears”.

 Thm: The triangulation graph can be 3-colored.

Proofs: Induction on n.

12

Ears

 A diagonal of the form vi-1vi+1 is an ear diagonal; the vi-1vivi+1 is an ear, and vi is the ear tip  Note that there are at most n ears (and that a has exactly n ears)

vi-1 vi+1

vi Ears [Devadoss-O’Rourke]

Proof(1): There are n edges of P and n-2 triangles in any triangulation. Imagine dropping the n edges into the n-2 “pigeonholes” corresponding to the triangles: Each edge appears on boundary of some triangle. By pigeonhole principle, at least 2 triangles get 2 edges “dropped in their box”.

(2) Consider the planar dual (excluding the face at infinity) of a triangulation of P. Claim: The dual graph for a triangulated simple polygon is a TREE. Any tree of 2 or more nodes has at least 2 nodes of degree 1. Triangulating a Simple Polygon 2  Simple “ear-clipping” methods: O(n )

 Cases with simple O(n) algorithms: • Convex polygons (trivial!) fan • Monotone polygons, monotone mountains

 General case (even with holes!): • Sweep algorithm to decompose into monotone mountains • O(n log n) Not practical!  Best theoretical results: • Simple polygons: O(n) [Chazelle’90] • Polygons with h holes: O(n+h log1+ h), (n+h log h) [BC]

 Good practical method: FIST [Held], based on clever methods of ear clipping (worst-case O(n2 ) ) 16 Lower Bound (n+h log h)

 (n) : Have to read the data

 (h log h) : from SORTING

17 FIST: Fast Industrial-Strength Triangulation

Based on ear clipping

Simple polygon FIST Constrained Delaunay Works nicely also for highly degenerate and “crazy” polygons

http://www.cosy.sbg.ac.at/~held/projects/triang/triang.html 3D cycles Ear-Clipping Triangulation

Input: Simple polygon P vi-1 vi+1

vi

pq is a diagonal, cutting off a single triangle (the “ear”) Naive: O(n3) Smarter: Keep track of “ear tip status” of each vi (initialize: O(n2) ) Each ear clip requires O(1) ear tip tests ( @ O(n) per test ) Ear-clipping applet Thus, O(n2) total, worst-case Triangulate

Ear-Clipping

 Lemma: When clipping ear wth tip vi the only ear tip statuses that can

change are at vi-1 and vi+1

Example: Triangulate Example: Output

(n2 ) Examples Exist

Faster Algorithm: O(n log n)

 Input: PSLG of size n; enclosed by a big box B

 Step 1: Use sweep to decompose B into “y-monotone mountains” – y-monotone polygons having one side (left/right) a single segment (the “base”); O(n log n)

 Step 2: Triangulate each y-monotone

polygon (size ni ) in time O(ni), for total O(n) 27  Overall: O(n log n) to triangulate PSLG Monotone Polygons

 P is monotone in direction d

t

d

Every line perpendicular to d intersects P in a connected b set; i.e., the left/right chains from bottom, b, to top, t, are each d-monotone. Monotone Polygons

 P is monotone in direction d

d y-

d Examples

 Which of these polygons are monotone? (with respect to which directions d?)

 Which are monotone mountains? With respect to which directions d? Examples of directions of monotonicity, d y-Monotone Polygon

d Monotone Mountains

t

d b Triangulating a Monotone Mountain in O(n)

 Ear clipping is easy!

• Testing if vi-1 vi+1 is a diagonal takes only O(1) time t

vi-1 vi

vi+1 vi is ear tip iff Left(vi+1 , vi , vi-1 )

Just traverse vertices from top to bottom. Test/clip ears. If an monotone ear is clipped, re-test the earity of the upper endpoint (vi-1 ) of the diagonal just clipped.

35 b Triangulating a Monotone Mountain in O(n)

36 Example

37 Triangulation in O(n log n)

 (1) Plane sweep to get horizontal trapezoidalization

L

Fire bullets left/right from each vertex

SLS: left-to-right ordering of segments crossed by L (balanced binary 38tree) Events: L hits a vertex Time: O(n log n) Sweep Algorithms

 Paradigm: Process geometric data by “sweeping” over it, in some order Sweep Algorithms  Two key ingredients of any sweep algorithm: • (1) The “Sweep Line Status” (SLS): gives a “combinatorial description” of the “slice” given by the sweeping line

 Often stored in a balanced binary tree • (2) Events: These are instants when the SLS “changes” combinatorially, and we must pause and do some event handling. Store in “Event Queue” (EQ), often a “priority queue” that allows us to quickly determine the next event

 Often events occur at certain discrete points/vertices of the input; EQ is sometimes “static” (events known in advance), sometimes “dynamic” (events learned as we go) Sweep Algorithms

 What is needed to describe a sweep algorithm: • What is being “swept”? (line, plane, curve, etc) And how is it “sweeping”? (“order”?) • What exactly does the SLS store, and in what kind of data structure is it stored (to provide for efficient updates as it changes)? • Exactly what are the “events”? How are they stored (the Event Queue, EQ)? How are they handled? Usually there are various cases, and one must specify for each exactly what updates are made to the SLS and the EQ (if any). Trapezoidalization

Trapezoidalization

Trapezoidalization

In each case: We do O(1) updates to the SLS, each taking time O(log n), since the SLS is stored in a balanced binary search tree. Trapezoidalization

Triangulation in O(n log n)

 (2) Join top vertex to bottom vertex in each

Lemma: Resulting pieces are monotone mountains 46 Triangulation in O(n log n)

 (3) Triangulate each monotone mountain

Triangulate each, in time O(ni ), for total time O(n)

Summary: O(n log n) to triangulate n points or a planar 47 straight-line graph (PSLG) Bottom Line: Triangulation in 2D

 Best theoretical results: • Simple polygons: O(n) [Chazelle’90] • Polygons with h holes: O(n+h log1+ h), (n+h log h) [BC] • PSLG: for each simple face (without

holes), O(ni); for each face with holes, 1+ O(ni+hi log hi)  Good practical method: FIST [Held], based on clever methods of ear clipping (worst-case O(n2 ))

Convex Decomposition

 Partition simple polygon P into a small number of convex pieces

One way to do it: Triangulate P Convex Decomposition

 Partition simple polygon P into a small number of convex pieces

Another way to do it: Use diagonals to partition P into convex polygons Convex Decomposition

 Partition simple polygon P into a small number of convex pieces

Another way to do it: Allow “Steiner” points (non-vertices) inside P. May get fewer pieces! Convex Decomposition

 Goal: Partition P into a small number of convex pieces (convex polygons)

 A triangulation is one possible decomposition into convex pieces, but it may have many more pieces than necessary!

 Dynamic Programming algorithms yield optimal solutions for simple polygons (for both Steiner and non-Steiner versions), in roughly O(n3) O(r 2n log n) without Steiner [Keil’85]; O(n+r3) allowing Steiner [Chazelle’80]

 Hertel-Mehlhorn algorithm: 4-approximation in time O(n) 52 Convex Decomposition

53 Convex Decomposition

54 Optimal Convex Decomposition

 Allowing Steiner points

55 Convex Decomposition

r=6

56 Convex Decomposition

One diagonal “resolves” the local nonconvexities at 2 reflex vertices at once r=6 We need at least r/2 segments to resolve all r reflex vertices Results in at least ceil(r/2)+1 pieces 57 Hertel-Mehlhorn Algorithm

 Start with any triangulation of simple polygon P (time O(n), [Chazelle])

 Remove inessential diagonals, in any order (time O(n), since we can test a diagonal locally in time O(1) to see if it is essential; if we remove a diagonal, we only have to update the “inessential” flag of O(1) other diagonals)

58 Hertel-Mehlhorn Algorithm  Lemma 2.5.2: At the end of the algorithm, for each reflex vertex v, there can be at most 2 diagonals essential for v

59 Hertel-Mehlhorn Algorithm

 Theorem 2.5.3: The H-M algorithm yields a decomposition into at most 4*OPT pieces, where OPT is the minimum possible number of convex pieces in a (Steiner) convex decomposition. We say that the H-M Algorithm is a “4-approximation algorithm”

OPEN: Find a better factor than 4, which still runs very efficiently (say, in O(n log n) or O(n) time).

60 Hertel-Mehlhorn Algorithm

 Proof: At end, each diagonal is essential for some (reflex) vertex.

 By Lemma 2.5.2, there are at most 2r diagonals left (since each reflex vertex is “responsible” for at most 2 diagonals)

 Thus, the number, M, of pieces is ≤ 2r+1 < 2r+4 ≤ 4*OPT (Since, by Theorem 2.5.1, OPT ≥ ceil(r/2)+1, so 4*OPT ≥4*ceil(r/2)+4≥2r+4)

61 H-M Algorithm: Example

Minimum-Weight Triangulation

3  MWT of a simple polygon: O(n ), using dynamic programming

 MWT of a polygon with holes (or of a AMSset of points 545 in the/ CSEplane) is 555 NP-hard

 Min-Weight Steiner Triangulation: allow extra “Steiner” points to be added • Not known to exist • 316-approximation known 63 MWT in Simple Polygon

 Dynamic Programming

 Bellman equation: • Let f(i,j) be the total length of diagonals AMSin a min 545-weight triangulation/ CSE 555in the simple polygon left of diagonal (i,j). f(i,j) = 0, if (i,j) is ear diagonal; else,

f(i,j)=mink:k sees i,j [|ik|+|kj|+f(i,k)+f(k,j)]

k i Time O(n3) j Related Optimizations Using DP

 Min-max diagonal triangulation of P

 Max-min diagonal AMSMin-max 545 triangle / CSE 555  Max-min area triangle

 Max-min

 Min-max angle

 Fewest-guards-by-Fisk-method

 etc