곡선을 따라 구성되지 않은 점 세트 정렬


9

커브 (즉, 솔리드의 가장자리)에 속하는 3D 포인트 (솔리드 바디의 테셀레이션을 수행하는 라이브러리에서 복구) 세트가 있습니다. 즉, 곡선은 반드시 이러한 각 점을 통과합니다.

그럼에도 불구하고 포인트 세트는 순서가 없으므로이 곡선을 올바르게 그릴 수 있도록 정렬해야합니다.

이러한 유형의 문제에 대해 알려진 접근법이 있습니까?

몇 가지 추가 정보 :

  • 커브는 일반적으로 파라 메트릭입니다 (스플라인 / 베 지어, 원형 슬라이스 ..).
  • 포인트는 부동 소수점 좌표로 제공됩니다.
  • 포인트는 매우 조밀하게 채워져 있습니다 (그러나 원하는만큼 조밀 할 수 있습니다). x에서 19 단위, x에서 10 단위 및 z에서 5 단위를 차지하는 곡선의 경우 곡선 세그먼트에서 일련의 점을 인용합니다. (20.7622, ​​25.8676, 0) (20.6573, 25.856, 0) (20.5529, 25.8444, 0) (20.4489, 25.8329, 0) (20.3454, 25.8213, 0)

비록 우리가 점을 통과하는 무한한 수의 곡선까지 순서를 알고 있다고해도. 추가 구속 조건을 추가하더라도 접선 방향이 임의적 일 수 있으므로 개방형 종단에 문제가 있습니다. 여기 사진
joojaa의

@joojaa 네, 그렇습니다. 그러나 포인트 패킹은 매우 밀도가 높기 때문에 정확한 것으로 기대하지는 않습니다. 올바른 순서를 갖추려면 점 시퀀스를 폴리 라인으로 연결할 계획이었습니다.
andrea.al

점을 정렬해야하는 코드에서, 파라 메트릭 형태의 곡선을 알고 있습니까? (그렇지 않으면 첫 번째 답변을 삭제하겠습니다. 파라 메트릭 양식을 알아야하기 때문입니다.)
Martin Ender

@ MartinBüttner 예, 필요한 경우 파라 메트릭 형태의 커브에 액세스 할 수 있습니다.
andrea.al

1
전형적인 포인트 세트를 보여주세요!
이브 다우 스트

답변:


6

구성 되지 않은 점에서 곡선 재구성 이라는 문제의 인스턴스가 있습니다. 이제 무엇을 검색해야하는지 알았으므로 빵 껍질, NN 빵 껍질 등과 같은 여러 가지 방법을 찾을 수 있습니다.

커브를 다루고 있고 샘플이 밀도가 높기 때문에 유클리드 최소 스패닝 트리를 계산하는 것이 좋습니다.


4

약간의 설명이 끝나면 아마도 매개 변수 형태의 곡선을 알 필요가 없으며 잠재적으로 문제가되는 숫자 최소화 단계를 피하는 훨씬 더 나은 접근 방식이있을 것입니다.

커브가 자체 교차하지 않고 포인트가 커브에 충분히 조밀하게 채워져 있다면 (즉 , 커브 래핑과 같이 동일한 세그먼트에 속하지 않는 커브의 두 포인트보다 가까워 야 합니다.) 각 샘플의 이전 지점과 다음 지점을 쉽게 결정할 수 있습니다.

  • 각 점에서 가장 가까운 두 이웃을 결정하십시오. 그건O(nlogn)작업 .
  • 엔드 포인트에 대해 특별한 처리를 수행해야합니다. 가장 가까운 두 이웃은 각면에 하나씩이 아니라 곡선을 따라 다음 점이됩니다. 두 이웃에 대한 거리의 비율이 임계 값 이상으로 다른 경우이를 발견 적으로 감지 할 수 있습니다 (1.5는 곡선의 매끄러움과 점의 밀도에 따라 달라짐). 또는 가장 가까운 이웃 데이터를 그래프로 취급하면 끝점의 두 이웃이 서로를 가리 킵니다 (그래프의 다른 곳에서는 발생하지 않아야 함).
  • 이제 하나의 끝점을 선택하고 가장 가까운 이웃 (항상 도착하지 않은 곳을 선택)을 따라 커브를 따라 점을 횡단 할 수 있습니다.

특히 포인트를 매우 조밀하게 만들 수있는 경우 커브가 자체 교차하지 않는 한 가장 안정적인 옵션이어야합니다. 이 경우에도, 자체 교차로의 곡선이 충분히 매끄러 울 정도로이 접근 방식은 복구가 가능할 수 있습니다 (이 경우 연속 단계로 인해 임계 값보다 큰 각도를 만들 수 없다는 제약 조건에 따라 올바른 이웃을 선택할 수 있습니다)θ).


3

점의 부동 소수점 표현 만 얻었으므로 반올림 오류로 인해 여전히 곡선에 정확하게 위치한다는 보장은 없습니다. 그래서 유일한 일반적인 접근 방식은 샘플에서 곡선에서 가장 가까운 점을 찾아서 곡선의 위치를 ​​대략적으로 추정하는 것입니다.(X,Y,Z). 예를 들어 파라 메트릭 곡선이(x(t),y(t),z(t)) 그런 다음 최소화하려고 할 수 있습니다

(Xx(t))2+(Yy(t))2+(Zz(t))2

에 관하여 t. 당신이 다루고있는 곡선의 유형을 알고 있다면 이것에 대한 훌륭한 분석 솔루션이있을 수 있습니다. 그렇지 않으면 수치 알고리즘에 의존해야합니다. 점이 곡선에 매우 가까워 야하기 때문에 곡선 (거의)이 교차하는 지점에 정확히 샘플이 없다면이 방법은 신뢰할 수 있어야합니다 (최소화 알고리즘이 제공되는 경우). 이 경우 어쨌든 운이 좋지 않을 수 있습니다.

일단 당신이 그것을 t 각 포인트에 대해 간단히 정렬 할 수 있습니다. t. 물론, 포인트를받는 방법에 대한 통제권이 있다면, 귀국하여이 모든 문제를 피할 수있을 것입니다t 포인트의 좌표와 함께 생성하는 동안 바로.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.