如下图所示,我有一个给定的旋转矩阵 R_given(从最右到最左的坐标系),并且我知道旋转矩阵 R_around_z,它是围绕最右坐标系的 z 轴的简单旋转。
旋转矩阵如下:
R_given = np.array([[-0.9993, -0.0172, 0.0340],
[0.0099, -0.9785, -0.2062],
[0.0368, -0.2057, 0.9779]])
R_around_z = np.array([[-1, 0, 0],
[0, -1, 0],
[0, 0, 1]])
是否有机会根据给定的两个矩阵获得我想找到的搜索旋转矩阵 R_searched?
我正在使用 Python 和 NumPy。
先感谢您。
当然可以!你可以通过矩阵乘法来获得你想要的旋转矩阵
R_searched
。因为旋转是连续应用的,所以你可以这样做:
import numpy as np
R_given = np.array([[-0.9993, -0.0172, 0.0340],
[0.0099, -0.9785, -0.2062],
[0.0368, -0.2057, 0.9779]])
R_around_z = np.array([[-1, 0, 0],
[0, -1, 0],
[0, 0, 1]])
# 为了得到 R_searched, 你需要反转 R_around_z 的应用顺序。
R_searched = np.dot(R_given, np.linalg.inv(R_around_z))
print(R_searched)
这里解释一下:
-
np.linalg.inv(R_around_z)
: 我们首先计算R_around_z
的逆矩阵。这是因为我们需要“撤销”R_around_z
的旋转来获得R_searched
。 -
np.dot(R_given, ...)
: 然后我们将R_given
与R_around_z
的逆矩阵相乘。这实际上是先应用R_searched
然后再应用R_around_z
来获得R_given
的过程的逆向操作。
最终得到的
R_searched
就是你想要的旋转矩阵。