2013-08-14 2 views
1

저는 Matlab의 함수 DelaunayTri를 사용하여 Delaunay 삼각 측량으로 변환 한 3D 점 구름을 가지고 있습니다. 이제 3D로 테스트 포인트를 얻었으며 Matlab에서이 점과 삼각 측량 사이의 최소 거리를 계산하려고합니다.Matlab을 사용하여 포인트에서 삼각형의 3D까지의 거리 계산

지금까지 필자는 Matlab의 DelaunayTri 클래스의 nearestNeighbor (...) 멤버 함수를 사용하여 내 테스트 점에 가장 가까운 삼각형의 점을 찾은 다음 이들 사이의 거리를 계산할 생각을했습니다. 그것은 무언가이지만 그것이 정말로 원하는 것이 아닙니다.

내 테스트 포인트에 대한 삼각 측량의 가장 가까운 점은 일반적으로 삼각형의 꼭지점이 아니라 삼각형 얼굴의 어딘가입니다. 이 점을 어떻게 찾을 수 있습니까?

감사합니다.

+0

근본적으로 당신이 묻는 것은 내부 점의 좌표와 4 개의 정점의 좌표가 주어진 정사면체의 표면에 가장 가까운 점을 찾는 것입니다. – Dan

+1

@Viruss mca : 코드에만 코드 형식을 사용하십시오. –

+0

@ Dan : 네, 맞습니다. Matlab이 반환하는 구조에서 4 개의 꼭지점을 찾는 방법을 잘 모르겠다는 것을 인정해야합니다. 그러나 내 테스트 포인트는 사면체 내부가 아닌 외부입니다. –

답변

0

나는이 코드를 작성했지만 파일 교환에 없습니다. 나는 그들에게 직접 우편으로 줄 것을 확신 할 수있다.

볼록 선체까지의 거리를 찾는 것이 상대적으로 쉽지만 사소하지는 않습니다. delaunay tessellation은 어쨌든 convex hull로 묶입니다. 따라서 그 모자이크를 볼록 선체로 쉽게 변환하거나 볼록 선체를 사용할 수 있습니다. 볼록한 선체는 종종 많은 목적을 위해 대단히 가깝지 않은 근사치입니다. 특히 색 매핑을 위해 이것을 사용한다면, 아마도 이것이 내가 보았던 가장 일반적인 것입니다. 이 경우 알파 모양이 훨씬 더 나은 선택입니다. 알파 도형은 일반적으로 볼록하지 않지만 삼각형 경계 표면을 갖습니다. 그래서

는 볼록 삼각 측량에 가장 가까운 지점을 찾을 수 있습니다 :
  1. 는 볼록 경계면, 즉, 볼록 선체로 변환합니다. 이것은 사면체 쌍들 사이에서 공유되지 않는 삼각형을 찾는 것을 감소시킵니다. 내부 패싯은 항상 모든 패싯 목록에서 정확히 두 번 나타납니다. 물론이 트릭은 비 convex Tessellation에도 적용됩니다. 알파도 마찬가지입니다.

  2. 각 삼각형 표면면에 대한 경계 외접원을 계산하십시오. 따라서 패싯 검사를 중단 할시기를 알 수 있습니다.

  3. 표면의 각 점까지의 거리를 구하십시오. 각 패싯을 해당 패싯에서 가장 가까운 점까지의 거리로 정렬합니다. 그 목록에서 가장 가까운 패싯을보고 시작하십시오.

  4. 3 단계에서 찾은 외관상 가장 가까운 패싯까지의 거리를 계산하십시오. 간단한 솔루션은 제한된 선형 최소 제곱으로 변환 될 수있는 최소 거리 프로그래밍 (LDP)에 의해 발견됩니다. Lawson & Hanson에는이 알고리즘이 있습니다. 발견 현재 최선의 거리까지

4 단계를 반복이 루프는 적어도 볼록 선체를 들어, 정말 아주 짧은 것 2 단계에서 circumcircles의과 비교, 거리보다 작다. 알파 형태의보다 일반적인 비 - 볼록 선체의 경우 더 많은 시간이 걸릴 수 있습니다.

문제의 지점으로부터 멀리 떨어져있는 검색에서 패싯을 제외하여 검색 공간을 조금 줄일 수도 있습니다. 이 패싯 법선을이 테스트에 사용하십시오.

+0

그 설명에 감사드립니다. 나는 3, 4 단계를 완전히 이해하지 못한다. 무엇으로부터 거리? 소스 코드를 얻는 것이 환상적입니다! 기꺼이 나누려한다면, 나는 매우 감사 할 것입니다! –

0

이 문제의 도구 point2trimesh을 작성했습니다. 이것은 볼록하지 않은 표면에서도 효과가있는 일종의 "무차별 대항"솔루션입니다.