Supplement

advertisement
Triangulation Supplemental
From O’Rourke (Chs. 1&2)
Fall 2005
1
Contents
• Ear clipping algorithm
• Triangulating monotonic polygons
• Monotonic decomposition via trapezoidalization
2
Ear Clipping
• Go around the polygon to check whether a
diagonal can be drawn from (i-1) to (i+1)
• Diagonal check:
What is the
– No edge crossing AND inside P
time complexity
in the worst
case?
3
5
3
7
4
6
1
0
2
4
Think…
• Can every simple polygon be triangulated?
• Does every simple polygon have at two ears (so
that ear clipping algorithm can work)?
5
Validity of Diagonal
• No edge crossing
– Each potential diagonal
(i-1, i+1) need to check
with ? edges
• “In-Cone” check:
– local geometry
6
Triangulating Monotonic Polygons
• Linear time algorithm: O(n)
• Fact on monotonic polygons
Why?
– Def: a vertex is called reflex if its internal angle is
strictly greater than p
– Def: cusp
• A reflex vertex whose adjacent vertices v- and v+ are
either both above or below v.
– Lemma:
• If a polygon P has no cusps, then it is monotone.
7
Algorithm Ideas:
• Cut off triangles from the top in a greedy
fashion
– At each step, the first available triangle removed
• For each vertex v, connect v to all the vertices
above it and visible via a diagonal, and remove
the top portion of the polygon thereby
triangulated
• Continue with the next vertex below v
8
9
Case 1:
Case 2a, 2b:
10
Triangulate Monotone Polygon
1
2
3
4
Sort by y-coordinate
reflex chain: {1,2}
v=3
5
6
7
8
11
v = 3 chain: {1,2}
[same side, non-convex]
1
2
3
4
Case 2b:
chain {1,2,3}
v=4
5
6
7
8
12
v = 4 chain: {1,2,3}
[same side, non-convex]
1
Case 2b:
chain {1,2,3,4}
v=5
2
3
4
5
6
7
8
13
v = 5 chain: {1,2,3,4}
[opposite side]
1
Case 1:
diagonal (5,2)
reflex chain {1,2,3,4}
2
3
4
5
6
7
8
14
v = 5 chain: {2,3,4}
[opposite side]
1
Case 1:
diagonal (5,3)
reflex chain {2,3,4}
2
3
4
5
6
7
8
15
v = 5 chain: {3,4}
[opposite side]
1
2
3
4
5
Case 1:
diagonal (5,4)
reflex chain {3,4}
reflex chain {4,5}
v=6
6
7
8
16
v = 6 chain: {4,5}
[same side, non-convex]
1
Case 2b:
reflex chain {4,5,6}
v=7
2
3
4
5
6
7
8
17
v = 7 chain: {4,5,6}
[same side, convex]
1
Case 2a:
diagonal (7,5)
reflex chain {4,5,6}
2
3
4
5
6
7
8
18
v = 7 chain: {4,5}
[same side, convex]
1
2
3
4
5
6
Case 2a:
diagonal (7,4)
reflex chain {4,5}
reflex chain {4,7}
v=8
7
8
19
v = 8 chain: {4,7}
[lowest vertex; stop]
1
2
3
4
5
6
7
8
20
0
1
2 {0,1,2}
3 {0,1,2,3}
4 {0,1,2,3,4}
{4,5}
{0,1,2,3,4} 5
{4,6}
{4,5}
6
7 {4,6}
{7,8}
{7,9}
{6,7}
{7,8}
{6,7}
8
9
10 {7,9}
{9,10}
11
12
13
21
Trapezoidalization
• Accomplish monotonic subdivision via horizontal
trapezoidalization
• Supporting vertices: the vertices through which the
horizontal lines are drawn
• Assume P be a polygon with no two vertices on a
horizontal line
– Each trapezoid has exactly two supporting vertices: one on
top, one on bottom
– Remove cusps by connecting the supporting vertex to the
opposite vertex
Assume no two points
have same y coord.
22
The support line
stops at the
boundary
23
Trapezoidalization via Plane Sweep
• Time complexity: O(n log n)
• Maintain a balanced tree of edges
24
Sweep Line Events
(…, a, c, b, …)
(…, a, d, b, …)
(…, a, c, d, b, …)
(…, a, b, …)
(…, a, b, …)
(…, a, c, d, b, …)
25
Summary
26
Review Questions
1. Analyze the worst case complexity of ear
clipping algorithm
2. Analyze the time complexity of the algorithm
for triangulating monotone polygon
3. Triangulate (and keep track of the reflex chain)
of the polygon on the next page
4. Decompose the polygon on page 24 into
monotonic pieces using trapezoidalization
27
28
Monotone-ization
• If the polygon has no cusp, it is monotone and
can be triangulated immediately.
• [seek an orientation where the polygon is
monotone]
• Decompose into monotone pieces via horizontal
trapezoidalization
29
Three Types of Event Points
Regular
(…, a, c, b, …)
(…, a, d, b, …)
Upward cusp
replace
(…, a, c, d, b, …) remove
(…, a, b, …)
Downward cusp
(…, a, b, …)
insert
(…, a, c, d, b, …)
30
Making Trapezoids
• Regular point: Extend toward material side until a
boundary is reached
• Cusps: extend both sides until boundaries are reached
31
{aj}
j
{ajih}
{ajicdh}u.cusp
h
a
i
d
b
c
e f
g
{ajicdg}
{acdg}d.cusp
{acdefg}u.cusp
{bcdefg}
{bcde}
{bc}
{}
Upward cusp: connect to
support vertex above
Downward cusp: connect to
support vertex below
[implementation]
32
Download