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

4

我在三维空间中有两个正方形。我想找到它们之间的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面向相同的方向


4
这是数学问题还是编程问题? - L.B
1个回答

9

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接