쉬운 방법 중 하나는 다음과 같습니다 당신이 완료하면
Sort the list of edges by end point. Call that array edges
Create a new array, polygon, size is num_edges
edgeIndex = 0
copy edge from edges[0] to polygon[0]
count = 1
while (count < number_of_edges)
{
starting_point = edges[edgeIndex].endpoint
// do a binary search to find the segment that starts
// at this edge's end point
newIndex = binary_search(edges, starting_point)
copy edge[newIndex] to polygon[count]
++count
edgeIndex = newIndex
}
에서, polygon
배열 순서, 가장자리를 포함해야합니다.
위의 설명에서는 가장자리 점이 합리적으로 출력되는 것으로 가정합니다. 즉, 정점을 가진 삼각형이 주어진다 '[(0, 0), (10, 10), (10, 0)], 에지는 다음과 같이 주어진다 :
{(0, 0), (10, 10)}
{(10, 10), (10, 0)}
{(10, 0), (0, 0)}
있지만, 반드시이 순서이다. 두 번째 가장자리가 {(10, 0), (10, 10)}
으로 주어지면 (즉 시작과 끝이 뒤집 혔을 때), 문제는 다소 어렵습니다.
해시 맵과 직접 검색으로 똑같은 작업을 수행 할 수 있습니다. 이진 검색보다 빠릅니다.
또한 하나의 점에 두 개 이상의 가장자리가 연결되어 있지 않은 것으로 가정합니다.
가장자리가 교차됩니까? 그들이하는 경우에 당신이 원하는 일은 무엇입니까? – angelatlarge
@angelatlarge : 그것은 오히려 중요합니다. 마치 자주 발생하는 것처럼, 최악의 경우의 성능은 다소 나빠질 수 있습니다. – Nuclearman
@angelarge @M C, 모서리가 교차하지 않습니다. 그들은 단지 끝에 만난다. –