2014-06-12 23 views
3

직육면체가 완전히 내부 또는 외부에 있거나 (안쪽 및 바깥 쪽이 아닌) 일반 (오목 또는 볼록) 다면체를 찾는 효율적인 알고리즘을 찾고 있습니다. 다면체는 3D 점 목록과 패싯 목록에 의해 정의됩니다. 각 패싯은 오른편 정상 점과 같이 솔리드 바깥으로 정렬 된 등고선 점의 하위 집합으로 정의됩니다.일반 다면체 내부의 Cuboid

의견이 있으십니까?

한 다면체 (입방) 내부에 완전히 또는 완전히 다른 다면체 외부 될 경우 당신

답변

2

감사가 얼굴 사이에 교차점이 없어야합니다.

다면체면이 직사각형면과 교차하는지 확인하십시오. 직각보다 교차가있는 경우 부분적으로 내부에 있습니다. 교차로가 없다면, 한쪽 입방체 꼭지점이 inside polyhedron인지 확인하십시오. 모서리 점이 내부에 있다면, 직육면체가 완전히 내부에 있고, 직육면체가 아니라면 완전히 외부입니다.

+0

당신은 어떤면에서 첫 번째 다면체가 직육면체라는 사실을 이용할 수 있다고 생각합니까? 어쩌면 패싯 교차로에서 골동품 – DOFHandler

+0

둥근 머리가 볼록하다. 교차로를 테스트하기 위해 다면체면을 쉽게 제거하는 데 사용할 수 있습니다. 하나의 직육면체면을 취합니다. 각 다면체 점에 대해 해당면의 어느면이 있는지 찾습니다. 외부에 모든 점이있는 다면체면은 입방체와 교차하지 않습니다. 입체면 전체가 다면체면 안쪽에 있으면 그면과 교차하지 않습니다. 모든 입방체 얼굴에 대해이 작업을 수행 할 수 있습니다. 또한, 직육면체가 평행 육면체 인 경우,이 검사는 2 개의 정사면체면에 대해 더 빨리 수행 될 수 있습니다. – Ante

0

교차로 모든 측면 쌍에 의하면 무력 위에 가능한 개선 :

  • 제 계산 비 볼록 다면체의 볼록 봉투 (내 추정은면 -면 체크 매우 고가이다).
  • 당신이 정숙성을 검사하는 정점에 의해 (상대적으로 싸게) 볼록하게 감싸고 있는지 확인하십시오. 모든 정점 당신이면 -면 교차 확인 만에을 수행해야 완전히 비 볼록 다각형의 외부 또는 안에 완전히 경우
  • *이
  • 비 볼록 다면체의 모든 정점에 대한 insideness 확인을 패싯은 이 아니고, 볼록 봉투의 일부입니다.

*이 단계는 완전히 두 표면 사이에있는 케이스를 잡아내는 데 필요합니다.

1

내 제안 : 다면체에 대한 절단 알고리즘을 구현하십시오. 평면을 기준으로 다면체를 두 개로 나눈 것입니다.

모든 정점에 대해 평면까지의 대수 거리를 계산할 수 있습니다.

차례로 다면체의 모든면을 고려하여 평면으로 자릅니다. 모든 정점이 평면의 같은면에 있으면 교차가 없습니다. 얼굴을 그대로 유지하거나 완전히 버릴 것입니다. 양쪽에 정점이 있으면 가장자리의 일부를 그대로 유지하고 다른 가장자리를 교차하여 버립니다. 교차 선을 따라 피어싱 점을 정렬 한 후 적절한 순서로 정점을 결합하여 절단면을 재구성합니다.

이렇게하면 커버면이없는 새로운면 세트가 다각형을 형성하게됩니다. 면을 닫는 데 사용 된 동일한 모서리를 사용하여 피어싱 점을 결합하여 재구성합니다. (실제로 횡단면이 여러 조각으로 만들어지기 때문에 여러면이 형성 될 수 있습니다.)

평면으로 다면체를자를 수 있으면 임의의 볼록과 교차점을 찾을 수 있습니다 큐브와 같은 다면체.

방금 ​​설명한 내용은 Sutherland–Hodgman clipping algorithm의 3D에 대한 일반화입니다.

다면체 정점이 모두 평면의 일부와 같은 크기에있을 때 행복한 경우가 있습니다. 이 테스트를 통해 작업을 시작할 수 있습니다. 그러나 다른 경우에는 진짜 지름길이 없습니다.

속도, 속도를 높이기 위해 볼륨,면 및 가장자리에서 경계 상자 테스트를 구현할 수 있지만 이러한 테스트를 많이 수행할수록 효율적입니다.

볼록 다면체와 교차하는 경우 모든면이 볼록하게 유지되고 위상 변화가 더 간단하므로 구현하기가 쉽습니다.

관련 문제