문제

3D 공간에 두 개의 사각형이 있습니다.x, y, z 각도를 찾고 싶습니다.나는 두 개의 사각형을위한 정상적인 벡터를 찾아서 시작했고, 나는 그들 사이의 각도를 얻는 방법을 알아 내려고 노력하고 있습니다.

XNA (C #) Vector3 객체를 사용하고 있습니다.

나는 다음과 같이 정상적인 벡터를 계산했다 :

        Vector3 normal1 = (Vector3.Cross(sq1.corners[0] - sq1.corners[1], sq1.corners[0] - sq1.corners[2]));
        Vector3 normal2 = (Vector3.Cross(sq2.corners[0] - sq2.corners[1], sq2.corners[0] - sq2.corners[2]));
.

Normal1이 Normal2

와 같은 방식으로 향하게하는 euler 회전을 찾고 싶습니다.

도움이 되었습니까?

해결책

먼저 축 및 회전량 (임의의 축을 가정)을 계산할 수 있습니다.

Vector3 axis = Vector3.Cross(normal1, normal2);
axis.Normalize();
double angle = Math.Acos(Vector3.Dot(normal1, normal2) / normal1.Length() / normal2.Length());
.

법선이 정규화되면 각도의 계산이

로 감소합니다.
double angle = Math.Acos(Vector3.Dot(normal1, normal2));
.

다음은 여기에서 함수와 함께 euler 각도로 변환 할 수 있습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top