计算两个正交投影之间的旋转角度

时间:2013-09-01 19:39:40

标签: math graphics rotation unity3d game-engine

Orthographic projection 1

Orthographic projection 2

我有一个单位立方体的正投影,其顶点之一位于原点,如上图所示。我有投影的x,y(没有z)坐标。我想计算平面的旋转角度,以获得第一个正投影(也许是欧拉角)?

还有其他简单的计算方法吗?

更新

Rotation Matrix

我可以使用这个旋转矩阵来获得cos,sin角和x,y和x',y'的方程组,并轻松解决它们吗?或者有更简单的方法来恢复角度? (我正朝着正确的方向解决这个问题吗?)

1 个答案:

答案 0 :(得分:1)

第一种方法

使用这个想法生成方程式:

enter image description here

a1,a2和a3是原始系统中的坐标,x y是从最终结果得到的坐标,z是您不知道的坐标。这为立方体的每个点生成2个方程。例如,对于坐标为(-1,-1,1)的点0,这些是:

enter image description here

对于立方体的4个前点执行此操作,您将获得8个等式。现在添加一个事实,即这是一个旋转矩阵 - >行列式是1,你有9个方程。用任何解决方程系统的常用算法来解决这些问题,你就有了变换矩阵。通过谷歌轻松获取轴和角度:http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/

第二种方法

分别命名你的分数0,1,2,3 a,b,c,d,你可以用这个想法得到它们之间的向量的z坐标(例如b-a):

enter image description here

但是,如果b3-a3是积极的,你仍然需要理清。一种方法是使用最中心的点作为b(计算所有点的中心距离,使用距离最小的点)。然后你肯定知道b3-a3是正面的(如果z对你是肯定的)。

现在假设变换空间中a为(0,0,0),您可以通过向其添加适当的向量来计算所有点位置。

要获得轮换,请使用您知道b-a在原始空间中指向的位置(例如(1,0,0))。您可以通过b-a(1,0,0)的点积以及旋转轴通过这些矢量之间的叉积来获得旋转角度。