找到两个法向量之间的x,y,z旋转

Jkh*_*kh2 3 c# math xna euler-angles

我在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]));
Run Code Online (Sandbox Code Playgroud)

我想找到将使normal1面向normal2的euler旋转

Nic*_*ler 8

首先,您可以计算轴和旋转量(假设任意轴):

Vector3 axis = Vector3.Cross(normal1, normal2);
axis.Normalize();
double angle = Math.Acos(Vector3.Dot(normal1, normal2) / normal1.Length() / normal2.Length());
Run Code Online (Sandbox Code Playgroud)

如果法线被归一化,则角度的计算减少到

double angle = Math.Acos(Vector3.Dot(normal1, normal2));
Run Code Online (Sandbox Code Playgroud)

然后你可以使用此处的函数将其转换为欧拉角