코드제거: 2012년 9월4일;  코드구현: http://kipl.tistory.com/13

폴리곤의 내부를 겹치지 않게 분할하는 것을 폴리곤의 삼각화라고 한다. N개의 꼭지점이 있는 폴리곤의 경우에 N-2개의 서로 겹치지 않은 삼각형을 내부에 가지게 되며, 폴리곤의 경계와 겹치지 않는  N-3개의 내부 경계라인을(diagonal)을 가지게 된다. 

사용자 삽입 이미지


많은 경우에 만들어진 삼각형의 외접원의 크기의 차이가 심하게 나타나서 면적하게 균일한 모양으로 형성되지 않는다. 이 경우에 인접하는 두개의 삼각형으로 형성된 사변형에서 현재의 대각변에 교차되는 대각변으로 재 분할을 하여서 만든 삼각형을 검사하여서 다시 구성할 수 있다. 물론 삼각형의 외접원의 반경이 작은 경우가 균일하게 삼각화된다. Polygon Optimizing을 참고하기 바란다.

*simple 폴리곤이 아닌 경우는 아래의 링크를 참조하기 바란다.

1).O(n log(n)) 복잡도를 갖는 polygon triangulation algorithm;
==>'Fast Polygon Triangulation based on Seidel's Algorithm'.
==>http://www.cs.unc.edu/~dm/CODE/GEM/chapter.html
2).Poly2Tri 홈페이지:
==>Fast and Robust Simple Polygon Triangulation With/Without Holes by Sweep Line Algorithm
==>http://www.mema.ucl.ac.be/~wu/Poly2Tri/poly2tri.html

triangulation notes : (몇개의 사이트는 없어졌다).
Nice lecture notes:
http://arachne.ics.uci.edu/~eppstein/junkyard/godfried.toussaint.html
▶ Narkhede & Manocha's description/code of Seidel's alg:
http://www.cs.unc.edu/~dm/CODE/GEM/chapter.html
▶ Some school project notes w/ triangulation overview & diagrams:
http://www.mema.ucl.ac.be/~wu/FSA2716-2002/project.html
▶ Toussaint paper about sleeve-following, including interesting
description & opinion on various other algorithms:
http://citeseer.ist.psu.edu/toussaint91efficient.html
▶ Toussaint outline & links:
http://cgm.cs.mcgill.ca/~godfried/teaching/cg-web.html
http://geometryalgorithms.com/algorithms.htm
▶ History Of Triangulation Algorithms
http://cgm.cs.mcgill.ca/~godfried/teaching/cg-projects/97/Thierry/thierry507webprj/complexity.html
▶ Ear Cutting For Simple Polygons
http://cgm.cs.mcgill.ca/~godfried/teaching/cg-projects/97/Ian//cutting_ears.html
▶ Intersections for a set of 2D segments
http://geometryalgorithms.com/Archive/algorithm_0108/algorithm_0108.htm
▶ Simple Polygon Triangulation
http://cgafaq.info/wiki/Simple_Polygon_Triangulation
▶ KKT O(n log log n) algo
http://portal.acm.org/citation.cfm?id=150693&dl=ACM&coll=portal&CFID=11111111&CFTOKEN=2222222
▶ Poly2Tri implemenation, good notes and looks like good code, sadly the
license is non-commercial only:(최근에 사이트가 존재하지 않음)
http://www.mema.ucl.ac.be/~wu/Poly2Tri/poly2tri.html
▶ FIST
http://www.cosy.sbg.ac.at/~held/projects/triang/triang.html
▶ Nice slides on monotone subdivision & triangulation:
http://www.cs.ucsb.edu/~suri/cs235/Triangulation.pdf
▶ Interesting forum post re monotone subdivision in Amanith:
http://www.amanith.org/forum/viewtopic.php?pid=43
 

'Computational Geometry' 카테고리의 다른 글

Brute Force Triangulation  (0) 2008.05.28
Polygon Triangulation (II)  (0) 2008.05.26
Polygon Triangulation  (4) 2008.05.25
Polygon Fill  (0) 2008.05.22
Fortune's Sweep Algorithm  (0) 2008.05.22
Triangulating Monotone Polygon  (0) 2008.05.22
Posted by helloktk

댓글을 달아 주세요

  1. 이상민 2008.05.26 12:55  댓글주소  수정/삭제  댓글쓰기

    잘 보았습니다. 이 분야로 졸업논문을 쓰고 있는데 많은 도움이 되었습니다.

  2. 이동기 2009.02.05 16:27  댓글주소  수정/삭제  댓글쓰기

    좋은글 공유해주셔서 감사합니다 잘 보고있습니다^^

    그런데 궁금한게 있습니다.

    이 알고리즘이 시계방향으로 그릴때와 반시계방향으로 그릴때 결과가 다르게 나오나요??

    저만 그런건지;;; 아니면 원래 그런건지 궁금해서요;;

    아. 그리고 마지막 점은 첫번째 점하고 같아야 하나요?

  3. helloktk 2009.02.07 00:09  댓글주소  수정/삭제  댓글쓰기

    코드에서 comment했듯이 위의 코드는 반시계방향의 입력에 대해서만 제대로 작동합니다(CCW 함수를 그렇게 만들었습니다.--> 물론 윈도우 그래픽은 y-방향이 위-아래가 우리가 보통 쓰는 좌표와 반대로 되어 있으므로 윈도우 그래픽상으로는 시계방향으로 나타났니다). 코드를 좀 수정하면 시계방향의 입력 폴리곤은 항상 다시 반시계방향으로 순서를 뒤집어서 만들수 있습니다.


    처음점과 마지막 점은 같지 않습니다. 같은 점(중복점)이 있으면 문제가 발생할 수 있습니다-->이것도 사전에 제거 되어야 합니다.

    제대로 할려면

    1. 입력 폴리곤의 중복점 제거
    2. 입력 폴리곤이 시계방향인지 반시계방향인지를 먼저 체크.
    3. 시계방향이면 점의 배열의 순서를 역으로 함.
    4. ear-clipping 알고리즘 적용

    이런 프로시져를 만들어야 합니다.

  4. YJ 2009.09.29 14:23  댓글주소  수정/삭제  댓글쓰기

    좋은 글 감사합니다. 제 작업에 많은 도움이 되었습니다.