3 차원 공간에서 말하지 않은 집합은 6 점입니다.3 차원 점 집합을 시계 방향/시계 반대 방향으로 정렬
(A)*
(C)*
(E)*
(F)*
(B)*
(D)*
포인트는 3 차원 등고선을 형성하지만 순서는 없습니다. 순서가 들어 나는 그들이 그냥 임의의 위치에서 시작하는이 목록을 재구성하려는
unorderedList = [A - B - C - D - E - F]
에 저장되어있는 것을 의미하고 시계 방향으로 포인트를 통과 또는 시계 반대 방향 (의 점 A를 가정 해 봅시다). 이런 식으로 뭔가 :
orderedList = [A - E - B - D - F - C]
또는
orderedList = [A - C - F - D - B - E]
언급의 포인트 세트의 각 정점의 N 링 지역에 해당하기 때문에 나는 가능한 한 간단하게하는 알고리즘을 구현하기 위해 노력하고있어 ~ 420000 포인트의 메시, 그리고 메쉬의 각 포인트에 대해이 작업을 수행해야합니다.
몇 시간 전 2 차원에서 점에 관한 similar discussion이 있었지만, 지금은이 접근법을 내 3 차원 시나리오로 이동하는 방법이 명확하지 않습니다.
벡터 제품을 사용'atan2', 비행기에서 방금 비교해야 점을 제외하고 모든 좋은라는 Vector3 변수가있는 클래스입니다. – unkulunkulu
'atan2'를 사용하는 데는 아무런 문제가 없습니다. 그럼에도 불구하고, unkulunkulu의 제안은 흥미 롭습니다! 일반적으로'(P1 x P2) · Z'는 일관성없는 정렬을 제공하지만 quicksort 나 피벗 기반 정렬과 같은 적절한 정렬 기법과 결합하면 작동합니다. 서클의 교차 제품에 'CW 또는 CCW로 이동하면 더 빨리 도착할 수 있습니까?'라는 메시지가 표시됩니다. * 다른 정렬 알고리즘이 실패 할 수 있습니다. * 그렇지 않으면 교차 제품을 사용하는 것이 어렵습니다. 예를 들어'(X x P2) · Z '로 정렬하려고하면'sin '은 0deg-180deg 범위에서 역전이 불가능합니다! 평상시처럼 정규화에주의해야합니다. – ninjagecko
ninjagecko, 제 생각에 당신이 제안한 접근법 (최상의 피팅 평면에 x, y, z 점을 투영하는 것)이 제 경우에 적절하다고 생각합니다. 그러나 나는 가설적인 문제를 생각하고 있습니다. 가장 잘 맞는 평면이 z = 0 (보통 : 0,0,1)이고 투영 될 내 점 중 두 개가 동일한 x 및 y 좌표를 공유한다고 가정 해 봅시다 (다른 점은 z 좌표에). 이 경우 3 차원에서 2 차원으로의 투영은 마치 1 포인트 인 것처럼 보입니다! 내가 맞습니까? 내가 놓친 게 있니? 그렇다면이 문제를 어떻게 극복 할 수 있습니까? – CodificandoBits