그래서 임의의 회전 및 크기의 두 큐브가 교차 하는지를 결정할 수있는 함수를 찾고 싶습니다.3d에서 2 개의 임의의 입방체의 교차점 찾기
큐브의 회전이 임의적이지는 않지만 (특정 축에 고정 된 경우) 교차가 간단합니다. 3 차원에서 서로 엇갈 리는지 경계를 확인하여 3 차원에서 교차하는지 확인합니다. 십자가가 두 개 밖에 없거나 교차하는 경우 교차하지 않습니다. 이 방법을 사용하여 임의의 큐브가 교집합 후보인지 여부를 결정할 수 있습니다. 최고/최저 x, y 및 z를 사용하여 외부 경계를 만들 수 있습니다.
이것이 첫 번째 단계입니다. 이론적으로, 그 정보로부터 우리는 그들이 어떤면에 있는지를 알 수 있습니다. 이것은 우리가 교차로에서 몇 개의 측면 (quad)을 제거 할 수 있음을 의미합니다. 그러나 큐브의 회전으로 인해 간단하게 결정하기가 어려울 수 있기 때문에 그 정보가 있다고 가정 할 수는 없습니다.
제 생각에 각 쌍의 쿼드를 가져 와서 평면의 교차점을 찾은 다음 그 선이 각 쌍의 측면 중 적어도 하나의 에지와 교차하는지 확인해야합니다. 어떤 쌍의면에 교차 선이 있고 그 모서리 중 하나와 교차하면 사면이 교차합니다. 교차하지 않으면 두 개의 큐브가 교차하지 않습니다.
그러면 우리는 평면 교차 선이 그 모서리와 교차하는 곳에서 두 번째 정육면체의 교차점의 깊이를 결정할 수 있습니다.
그러나 이것은 단순히 추측입니다. 이 두 가지 큐브의 교차점을보다 효율적으로 결정할 수있는 방법이 있습니까? 이 작업을 수행하는 여러 가지 방법을 생각해 볼 수 있으며 필요한 계산량 측면에서 매우 다를 수 있음을 알 수 있습니다.
나는 자바로 작업하고 있지만 C/C++ 솔루션도 멋지다 (나는 이식 할 수있다). 그것은 아마도 큰 질문이기 때문에 심지어 psuedocode.
않습니다하지에서 내가 C#을이 라이브러리를 포팅 한 당신이
http://evanw.github.io/csg.js/docs/
에있는 CSG을 수행하는 자바 스크립트 라이브러리를 볼 수있는 옵션입니다 [분리 축 Theorm] (http://en.wikipedia.org/wiki/Hyperplane_separation_theorem)은 2D에서와 같이 3D에서도 작동합니까? –
아마도 그렇게 생각합니다.나는 그 생각을하지 않았다. 나는 이미 3D 버전을 3D의 3 세트로 사용하고 있습니다. 이것은 내가 생각했던 것보다 더 간단 할 수도 있습니다! –
나는 그것이 당신을 위해 일할 것이라고 생각합니다. 꽤 확신 해요, 제가 2 차원 다각형 교차점을 연구 할 때 읽었습니다. –