1 / 22

Polygon Triangulation

Polygon Triangulation. Computational Geometry, WS 2006/07 Lecture 8, Part 2 Prof. Dr. Thomas Ottmann. Algorithmen & Datenstrukturen, Institut für Informatik Fakultät für Angewandte Wissenschaften Albert-Ludwigs-Universität Freiburg. Triangulation of a convex polygon. P. l. l-Monotone.

Télécharger la présentation

Polygon Triangulation

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Polygon Triangulation Computational Geometry, WS 2006/07 Lecture 8, Part 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät für Angewandte Wissenschaften Albert-Ludwigs-Universität Freiburg

  2. Triangulation of a convex polygon Computational Geometry, WS 2006/07 Prof. Dr. Thomas Ottmann

  3. P l l-Monotone Convex polygons are easy to triangulate. Unfortunately the partition into convex pieces is just as difficult as the triangulation. l-monotone A simple polygon is called monotone w.r.t. a line l if for any line l´ perpendicular to l the intersection of the polygon with l´ has at most one connected component. Computational Geometry, WS 2006/07 Prof. Dr. Thomas Ottmann

  4. Two steps for triangulation 1. Divide P into y-monotone parts P1,...,Pk 2. Triangulate P1,...,Pk Computational Geometry, WS 2006/07 Prof. Dr. Thomas Ottmann

  5. Five types of vertices = start vertex = end vertex = regular vertex = split vertex = merge vertex Computational Geometry, WS 2006/07 Prof. Dr. Thomas Ottmann

  6. (b) P split vertex (a) q r = p r´ l p q r P merge vertex Y-Monotone Lemma: A polygon is y-monotone if it has no split vertices ormerge vertices. Proof: Suppose P is not y-monotone  there is a horizontalline l that intersects P in more than one connectedcomponent. We show that P must have at least one split or merge vertex: Computational Geometry, WS 2006/07 Prof. Dr. Thomas Ottmann

  7. helper(ej) is lowest vertex above the sweep line such that the horizontal segment connecting the vertex to ej lies inside P. helper(ej) ek ej l vi ei ei-1 ek Merge-nodes are split nodes in reverse. vi is the new helper of ej . We would like to connect vi to the highest vertex below the sweep line in between ej and ek vi ej vm Removal of Split and Merge Vertices Computational Geometry, WS 2006/07 Prof. Dr. Thomas Ottmann

  8. Algorithm: MakeMonotone Input: A simple polygon P stored in a doubly-connected edge list D Output: A partitioning of P into monotone sub-polygons, stored in D Construct a priority queue Q on the vertices of P. Initialize an empty binary search tree T. while Q is not empty do remove the vertex vi with highest priority from Q call appropriate procedure to handle the vertex. Computational Geometry, WS 2006/07 Prof. Dr. Thomas Ottmann

  9. Handling Start Vertices HandleStartVertex(vi): T = T  {ei}, helper(ei) = vi vi ei Computational Geometry, WS 2006/07 Prof. Dr. Thomas Ottmann

  10. Handling End Vertices HandleEndVertex(vi): if helper(ei-1) is merge vertexthen insert diagonal connecting vi to helper(ei-1) in D. T = T- {ei-1} ei-1 vi Computational Geometry, WS 2006/07 Prof. Dr. Thomas Ottmann

  11. Handling Split Vertices HandleSplitVertex(vi) : Search in T to find the edge ej directly left of vi Insert the diagonal connecting vi to helper(ej) in D. helper(ej) = vi Insert ei in T and set helper(ei) to vi ej vi ei Computational Geometry, WS 2006/07 Prof. Dr. Thomas Ottmann

  12. Handling Merge Vertices HandleMergeVertex(vi) : if helper(ei-1) is a merge vertex then Insert diagonal connecting vi to helper(ei-1) in D. Delete ei-1 from T. Search in T to find the edge ej left of viif helper(ej) is a merge vertexthen Insert diagonal connecting vi to helper(ej) in D. helper(ej) = vi ei-1 ej vi Computational Geometry, WS 2006/07 Prof. Dr. Thomas Ottmann

  13. Handling Regular Vertices HandleRegularVertex(vi) : if the interior of P lies to the right of vithen if helper(ei-1) is a merge vertex then Insert the diagonal connecting vi to helper(ei-1) in D Delete ei-1 from T. Insert ei in T and set helper(ei) to vi.else search in T to find the edge ej left of vi if helper(ej) is a merge vertex then insert the diagonal connecting vi to helper(ej) in D helper(ej) = vi ei-1 vi ei Computational Geometry, WS 2006/07 Prof. Dr. Thomas Ottmann

  14. Handling Regular Vertices HandleRegularVertex(vi) : if the interior of P lies to the right of vi then if helper(ei-1) is a merge vertex then Insert the diagonal connecting vi to helper(ei-1) in D Delete ei-1 from T. Insert ei in T and set helper(ei) to vi.else search in T to find the edge ej left of viif helper(ej) is a merge vertexthen insert the diagonal connecting vi to helper(ej) in D helper(ej) = vi vi ej Computational Geometry, WS 2006/07 Prof. Dr. Thomas Ottmann

  15. v T helper a b c d e ! f g h i j ! k l m ! n o Example b a d c e f h g i j k l m n o Computational Geometry, WS 2006/07 Prof. Dr. Thomas Ottmann

  16. vm ek ej Q vi Correctness of MakeMonotone To show: Added segments are valid diagonals. Proof for the segment added in HandleSplitVertex Consider a segment vmvi that is added when vi is reached by HandleSplitVertex. Let ej be the edge to left of vi, and let ek be the edge to right of vi . helper(ej) = vm when we reach vi . I. vmvi does not intersect an edge of PConsider the quadrilateral Q, there are no vertices of P inside Q, else vm would not be helper of ej . Suppose there would be an edge of P intersecting vmvi then it would have to intersect the horizontal segment connecting vi to ej or vm to ej but this is impossible since ej immediately to the left of vm and vi . II. vmvi does not intersect a previously added diagonal d Since there are no vertices of P inside Q, and d must have both its endpoints above vi, vmvi cannot intersect d. Computational Geometry, WS 2006/07 Prof. Dr. Thomas Ottmann

  17. Monotone Partitioning Theorem: A simple polygon with n vertices can be partitioned into y-monotone polygons in O(n log n) time with an algorithm that uses O(n) storage. Computational Geometry, WS 2006/07 Prof. Dr. Thomas Ottmann

  18. Triangulation of y-monotone Polygons Idea: Process vertices from top to bottom For each vertex v, connect v to all vertices above it and visible via a diagonal, continue with next vertex below v. The algorithm requires a stack. The vertices in the stack build a reflex chain, which is the borderline between the triangulated and not yet triangulated part of the polygon. Two cases when encountering a vertex uj: 1. uj lies on the opposite chain as the reflex vertices on the stack uj Computational Geometry, WS 2006/07 Prof. Dr. Thomas Ottmann

  19. Triangulation of y-monotone Polygons 2. uj lies on the same chain as the reflex vertices on the stack Two cases: uj uj Computational Geometry, WS 2006/07 Prof. Dr. Thomas Ottmann

  20. Implementation 1. S.push(u1), S.push(u2) 2. for j = 3,...,n-1 3. if (side(uj)  side(S.top)) 4. while (S ) v = S.pop, diag(uj,v) 5. S.push(uj-1) 6. S.push(uj) 7. else S.pop 8. while (diag(S.top, uj) in P) 9. diag(S.top, uj) 10. S.pop 11. S.push(last) 12. S.push(uj) uj uj Computational Geometry, WS 2006/07 Prof. Dr. Thomas Ottmann

  21. 0 1 2 3 4 6 5 8 7 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Example Computational Geometry, WS 2006/07 Prof. Dr. Thomas Ottmann

  22. Theorems Theorem: A strictly y-monotone polygon with n vertices can betriangulated in O(n) time. Theorem: A simple polygon with n vertices can be triangulated in O(n log n) time with an algorithm that uses O(n) storage. Theorem: A planar subdivision with n vertices in total can be triangulated in O(n log n) time with an algorithm thatuses O(n) storage. Computational Geometry, WS 2006/07 Prof. Dr. Thomas Ottmann

More Related