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

本文关键字:之间 旋转 向量 两个 查找 | 更新日期: 2023-09-27 18:34:54

我在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]));

我想找到欧拉旋转,它将使法线1朝向与法线相同的方向2

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

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

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));

然后你可以从这里用函数将其转换为欧拉角