2010-07-17 3 views
0

필자는 요소와 좌표로 표현되는 지형을 가지고 있으며, 평면이 있습니다.비행기 터 레인 알고리즘과 교차하기

비행기와 지형 간의 교차 경로를 찾는 방법은 무엇입니까? 나는 비행기를 라인 목록으로 나눈 다음 광선 캐스팅 기법이나 다른 기법을 사용하여 교차리스트를 계산하고 함께 결합해야합니까? 아니면 다른 방법이 있습니까?

This question은 여기서 내 질문의 특수한 경우이다. 비행기를 지형과 교차하는 선을 얻기 위해 교차점을 많이 찾음으로써 실제로 비행기를 이산화했다. 더 좋은 방법이 있는지 궁금합니다.

답변

0
  1. 암시 적 방정식을 사용하여 평면을 정의하십시오. 비행기의 모든 (x, y, z)에 대해 ax + by + cz + d = 0이되도록 a, b, c 및 d를 찾으십시오.
  2. 지형 세그먼트를 정의하는 모든 사각형을 살펴보십시오. 정사각형을 두 개의 분리 된 삼각형으로 해석하기
  3. 각 정점 v1 = (x1, y1, z1), v2 = (x2, y2, z2), v3 = (x3, y3, z3) 비행기는 거짓말 :
    • L1 = A X1 + B Y1 + C * Z1 + D
    • L2 = A X2 + B Y2 + C * Z2 + D
    • L3 = A x3 + by3 + c * z3 + d
  4. 두 가지 옵션이 있습니다.
    • l1, l2, l3 모두> 0 또는 l1, l2, l3은 모두 <입니다.이 경우 평면은 삼각형과 교차하지 않으며 사용자는 아무 것도 할 수 없습니다.
    • 또는 두 개의 l 값 중 하나가 양수/음수이고 세 번째 값이 반대입니다. l1> 0, l2> 0 및 l3 < 0 - 그러면 삼각형 모서리 v1-v3 및 v2-v3이 교차 중입니다.
  5. 에지 평면 교차가 계산하기 쉽습니다. V1의-V2 가장자리가 교차되는 가정하면
    • XI = (X1 *의 L1 - 2 배 *의 L2)/(L1 - L2)
    • 이순신 = (Y1의 *의 L1 - Y2의 *의 L2)/(L1 - L2)
    • ZI = (Z1의 *의 L1 - Z2 * L2)/(L1 - L2)

이 방법은 당신이 당신의 지형과 평면의 교차점에 해당 가장자리의 목록을 얻을 것이다. 느린 방법이지만 설명하기 쉽습니다 ... 속도를 높이려면 octrees 나 유사한 데이터 구조를 사용하여 수행해야하는 점/평면 테스트의 양을 제한해야합니다.

관련 문제