Contest Algorithms January 2016 Triangulation & the Art Gallery Problem Contest Algorithms1
1. Simple Polygons Some definitions would allow this as a “degenerate” simple polygon P is a simple polygon is one which does not intersect with itself
A partition of P into triangles by a set of noncrossing diagonals. 2. Triangulation
create a stack with all of the vertices in CCW order; pop the top vertex off the stack and store in p0; pop the top vertex off the stack and store in pHelper; while the stack is not empty pop the top vertex off the stack and store in pTemp; create a triangle with vertices p0, pHelper, pTemp; let pHelper = pTemp Triangulation of Convex Polygons Contest Algorithms4
A simple polygon has a triangulation. An n-gon with n 4 has a diagonal. Any triangulation of a simple n-sided polygon has: n-3 diagonals n-2 triangles Triangulation Theory in 2D 5
A diagonal of the form v i-1 v i+1 is an ear diagonal ; the triangle v i-1 v i v i+1 is an ear, and v i is the ear tip There are at most n ears (and a convex polygon has exactly n ears) Ears v i-1 v i+1 vivi
Ear Clipping Triangulation Contest Algorithms7
create a list of the vertices (in CCW order, starting anywhere) while true for every vertex let pPrev = the previous vertex in the list let pCur = the current vertex; let pNext = the next vertex in the list if the vertex is not an interior vertex; continue; if there are any vertices in the polygon inside the triangle made by the current vertex and the two adjacent ones continue; create the triangle with the points pPrev, pCur, pNext; remove pCur from the list; if no triangles were made in the above for loop break; Pseudo-code Contest Algorithms8 see triangulate() and isEar() in Polygon.java
Simple “ear-clipping” methods: O(n 2 ) Cases with simple O(n) algorithms: Convex polygons (trivial!) Monotone polygons, monotone mountains General case (even with holes!): Sweep algorithm to decompose into monotone mountains O(n log n) Triangulation Running Times 9
A polygon is monotone with respect to a line L, if every line orthogonal to L intersects P at most twice. allows for sweep-based triangulation methods Monotone Polygon Contest Algorithms10
Example (tri4.txt) Contest Algorithms
> java TriangulationTests tri4.txt Triangulation: Indicies: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17] try ear: 17, 0, 1 > 1. Cut off: [ (5.000, 5.000) (0.000, 0.000) (10.000, 7.000) ] Indicies: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17] try ear: 17, 1, 2 try ear: 1, 2, 3 > 2. Cut off: [ (10.000, 7.000) (12.000, 3.000) (20.000, 8.000) ] Indicies: [1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17] try ear: 1, 3, 4 try ear: 3, 4, 5 try ear: 4, 5, 6 > 3. Cut off: [ (13.000, ) (10.000, ) (12.000, ) ] Indicies: [1, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17] try ear: 4, 6, 7 > 4. Cut off: [ (13.000, ) (12.000, ) (14.000, 9.000) ] Indicies: [1, 3, 4, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17] try ear: 4, 7, 8 try ear: 7, 8, 9 try ear: 8, 9, 10 Execution Contest Algorithms12 see TriangulationTests.java
try ear: 9, 10, 11 > 5. Cut off: [ (6.000, ) (10.000, ) (7.000, ) ] Indicies: [1, 3, 4, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17] try ear: 9, 11, 12 > 6. Cut off: [ (6.000, ) (7.000, ) (0.000, ) ] Indicies: [1, 3, 4, 7, 8, 9, 12, 13, 14, 15, 16, 17] try ear: 9, 12, 13 try ear: 12, 13, 14 > 7. Cut off: [ (0.000, ) (1.000, ) (2.000, ) ] Indicies: [1, 3, 4, 7, 8, 9, 12, 14, 15, 16, 17] try ear: 12, 14, 15 try ear: 14, 15, 16 try ear: 15, 16, 17 > 8. Cut off: [ (5.000, 8.000) (-2.000, 9.000) (5.000, 5.000) ] Indicies: [1, 3, 4, 7, 8, 9, 12, 14, 15, 17] try ear: 15, 17, 1 > 9. Cut off: [ (5.000, 8.000) (5.000, 5.000) (10.000, 7.000) ] Indicies: [1, 3, 4, 7, 8, 9, 12, 14, 15] try ear: 15, 1, 3 > 10. Cut off: [ (5.000, 8.000) (10.000, 7.000) (20.000, 8.000) ] Indicies: [3, 4, 7, 8, 9, 12, 14, 15] try ear: 15, 3, 4 : Contest Algorithms13
[ (5.000, 5.000) (0.000, 0.000) (10.000, 7.000) ] [ (10.000, 7.000) (12.000, 3.000) (20.000, 8.000) ] [ (13.000, ) (10.000, ) (12.000, ) ] [ (13.000, ) (12.000, ) (14.000, 9.000) ] [ (6.000, ) (10.000, ) (7.000, ) ] [ (6.000, ) (7.000, ) (0.000, ) ] [ (0.000, ) (1.000, ) (2.000, ) ] [ (5.000, 8.000) (-2.000, 9.000) (5.000, 5.000) ] [ (5.000, 8.000) (5.000, 5.000) (10.000, 7.000) ] [ (5.000, 8.000) (10.000, 7.000) (20.000, 8.000) ] [ (20.000, 8.000) (13.000, ) (14.000, 9.000) ] [ (6.000, ) (0.000, ) (2.000, ) ] [ (6.000, ) (2.000, ) (5.000, 8.000) ] [ (5.000, 8.000) (20.000, 8.000) (14.000, 9.000) ] [ (5.000, 8.000) (14.000, 9.000) (8.000, ) ] [ (5.000, 8.000) (8.000, ) (6.000, ) ] try ear: 3, 4, 7 > 11. Cut off : [ (20.000, 8.000) (13.000, ) (14.000, 9.000) ] Indicies: [3, 7, 8, 9, 12, 14, 15] try ear: 3, 7, 8 Collinear problem near point 3 try ear: 7, 8, 9 try ear: 8, 9, 12 try ear: 9, 12, 14 > 12. Cut off : [ (6.000, ) (0.000, ) (2.000, ) ] Indicies: [3, 7, 8, 9, 14, 15] try ear: 9, 14, 15 > 13. Cut off: [ (6.000, ) (2.000, ) (5.000, 8.000) ] Indicies: [3, 7, 8, 9, 15] try ear: 9, 15, 3 try ear: 15, 3, 7 > 14. Cut off : [ (5.000, 8.000) (20.000, 8.000) (14.000, 9.000) ] Indicies: [7, 8, 9, 15] try ear: 15, 7, 8 > 15. Cut off : [ (5.000, 8.000) (14.000, 9.000) (8.000, ) ] Indicies: [8, 9, 15] try ear: 15, 8, 9 > 16. Cut off : [ (5.000, 8.000) (8.000, ) (6.000, ) ] Indicies: [9, 15] Contest Algorithms14 16 triangles for 18-sided polygon 2 points left at end; 16 used
Result Contest Algorithms triangles and 15 diagonals for 18-sided polygon
3. The Art Gallery Problem Question: How many guards are needed to guard an art gallery? Guard: (camera, motion sensors, fire detectors, …) - 2 range visibility - infinite distance - cannot see through walls x y z
Some Gallery Examples n=3 n=4 n=5 n=6 the best guard position; 1 guard needed
n=6 n=9 n=3k
Put one guard in each triangle. Since the triangle is convex, the guard can see the whole triangle. Guard Positioning Using Triangulation
An assignment of one out of three colors to each vertex. Adjacent vertices must have different colors. 3-Coloring
Theorem; For any simple polygon with n vertices guards are sufficient to guard the whole polygon -- this means less guards might be possible There are polygons for which guards are necessary -- less is not possible, e.g: Art Gallery Theorem n3n3 n3n3