我正在将密度值的3D矩阵投影到3个2D平面(ZX,ZY,XY)中。然后我使用下面的旋转矩阵将每个投影旋转3个不同的角度:Pzx,Pzy,Pxy:
如何转换这三个单独的角度,以便我可以将它们应用于3D变换矩阵,该矩阵将围绕X,Y,Z(或Z,Y,X)旋转3D对象,例如下面的旋转矩阵: / p>
要清楚,我不希望将角度Pzx,Pzy,Pxy应用于3D对象,而是计算2D中的单个旋转将在3D中转换为什么。
答案 0 :(得分:1)
这个问题产生了一个方程组。设R_3d
为三维空间中的旋转,R_xy
平面中的旋转为xy
,[*]_xy
为*
上xy
的投影飞机。然后对于任何点v
:
I: [R_3d v]_zx = R_zx [v]_zx
II: [R_3d v]_zy = R_zy [v]_zy
III: [R_3d v]_xy = R_xy [v]_xy
我们看到每个坐标都存在于两个方程中。让我们检查x坐标的相关方程:
a := alpha, b := beta, c := gamma
I: cos b cos c x - cos b sin c y + sin b z = sin Pzx z + cos Pzx x
III: cos b cos c x - cos b sin c y + sin b z = cos Pxy x - sin Pxy y
我们看到以下关系适用于任何v
(两个方程的右侧):
sin Pzx z + cos Pzx x = cos Pxy x - sin Pxy y
其他两个坐标存在类似的方程式。只有满足这些条件,才能存在精确的3d旋转。如果我没有弄错的话,那只有Pzx=Pzy=Pxy=0
的情况。通常,可以计算近似解。我建议基于以下能量的最小二乘解决方案:
E(a, b, c) = Sum { for all v in data set } ( || [R_3d v]_zx - R_zx [v]_zx ||^2
+ || [R_3d v]_zy - R_zy [v]_zy ||^2
+ || [R_3d v]_xy - R_xy [v]_xy ||^2 )
最佳旋转参数为:
{a, b, c}* = arg min {a, b, c} E(a,b,c)
此解决方案将最小化相应点的两个投影的距离。
不幸的是,问题不是一个容易解决的线性最小二乘问题。相反,迭代方法可以解决这个问题(例如Levenberg-Marquardt)。在您的编程语言中寻找该算法的实现,插入能量并求解最佳旋转参数。