2010-01-26 4 views
0

3D 공간에서 두 개의 삼각형 사이의 각도를 계산하고 싶습니다. 두 개의 삼각형은 항상 정확히 두 점을 공유합니다. 예 :CUDA에서 두 개의 삼각형 사이의 각도를 계산하십시오.

삼각형 1
POINT1 (X1, Y1, Z1),
POINT2 (X2, Y2, Z2)
POINT3 (X3, Y3, Z3).

삼각형 2
POINT1 (X1, Y1, Z1),
POINT2 (X2, Y2, Z2)
Point4 (X4, Y4, Z4).

CUDA에서 각도를 효율적으로 계산할 수있는 방법이 있습니까?

+0

나는 "그들 사이의 차수"*를 정의해야 할까봐 걱정됩니다. 당신은 각각의 비행기 사이의 각도를 의미합니까? –

+0

yes, 각 비행기 사이 –

+0

오, 죄송합니다. 각 삼각형 공유 * 2 점을 놓친 것이 오히려 명백해 보입니다. –

답변

3

각 평면에 대해 법선 벡터 (평면에있는 모든 선에 수직)를 만들어야합니다. 이를 수행하는 간단한 방법은 삼각형에있는 두 개의 비평 행 선의 외적을 취하는 것입니다. (예를 (P3는-P1) X (P2는-P1) 및 (P4-P1) X (P2-P1).

들을 정규화.

두 방향 벡터의 내적 준다 당신은 각도의 코사인입니다

까다로운 비트는 퇴행 삼각형에주의해야합니다! 삼각형을 정의하는 모든 3 점이 동일 직선 (그 삼각형은 단지 하나의 선)이면, 사용자가 요구하는 것은 정의되지 않습니다. 교차 제품은 0으로 나뉩니다.이 경우 어떤 작업을 수행할지 결정해야합니다.

GPU에서이 작업을 수행하려고하므로 효율성이 염려되는 경우 분기없이이 함수를 작성하는 것이 이상적입니다. 그 말은 if 절을 사용하여 축퇴 삼각형을 테스트하는 대신에 삼항 문자를 사용하여 시도해보십시오. A ? B : C

1

삼각형 사이의 각도는 각 삼각형의 세 점으로 정의 된 평면 사이의 각도와 같습니다.

포인트 1 또는 포인트 2가 모두 두 평면에 있기 때문에 포인트 중 하나에서 포인트 3으로, 그리고 포인트 4로 방향 코사인을 계산합니다. 그러면이 두 라인 사이의 각도 코사인은 해당 방향 코사인의 곱의 합.

+0

감사합니다. ansi-c에서 구현하는 데 문제가 없습니다. 하지만, 쿠다 커널은 어떨까요? –

+0

그건 나도 몰라. 어쨌든 고마워 – John

+0

! :) –

관련 문제