给定任意4x4变换矩阵,我如何找出旋转中心?
m = [m11 m12 m13 m14;
m21 m22 m23 m24;
m31 m32 m33 m34;
m41 m42 m43 m44]
答案 0 :(得分:2)
如果你知道m
纯粹是一个旋转矩阵,而不是不同类型的多个变换的聚合,你可以通过求解下面的等式找到旋转轴(向量v
):
mv = v
这是有效的,因为围绕自身旋转矢量不会改变矢量。 (注意,这个等式有多种解决方案,但它们的区别仅在于标量因子。)
不幸的是,如果您无法确定m
是否包含其他变换,我不知道您是否可以找到旋转轴,或者即使找到了唯一的旋转轴
答案 1 :(得分:0)
给定任意4x4变换矩阵,我如何找出旋转中心?
在一般情况下,问题无法解决,因为矩阵可能不代表旋转。它可以是投影矩阵,零矩阵等。
除此之外,您可能需要查看this answer。
您的矩阵表示将旧坐标系转换为新坐标系的转换。
对象矩阵可以这样表示:
objx.x objx.y objx.z 0 //m[0][0]..m[0][3] or _11, _12, _13, _14
objy.x objy.y objy.z 0 //m[1][0]..m[1][3] or _21, _22, _23, _24
objz.x objz.y objz.z 0 //m[2][0]..m[2][3] or _31, _32, _33, _34
objpos.x objpos.y objpos.z 1 //m[3][0]..m[3][3] or _41, _42, _43, _44
其中m [] []和_11 .._ 44是D3DMATRIX的对应元素,objpos - 对象位置向量,objx - 对象x('局部x'转换为世界空间)向量等
因此,只要最后一列(m [0..3] [3])为0,0,0,1,就可以提取对象位置及其“x”,“y”,“z”向量(矩阵中的“边”,“上”,“前” - 这取决于应用。如果最后一列不是“0,0,0,1”,那么它就是投影矩阵,你不能轻易地从中提取对象数据。
因此,您可以在新坐标系内提取单个向量和旧坐标系的中心,以及各个向量。你可以找到旋转中心或任何你想要的东西。
但是,对于表示旋转的矩阵,必须满足以下条件:
单个轴应正确定向(因此您可以确定这不是“镜像”矩阵)。确切的方向取决于您的应用程序。可能是这样的: