所以我有一个3d矩阵:
[[ 0.99742808 0.01090133 0.07084053]
[-0.00373406 0.99492706 -0.10052965]
[-0.07157707 0.10000657 0.99240889]]
我想做一个函数来计算它的旋转角度,但是,我怎么才能得到a11或a12,等等。zip(*matrix)
在2d数组上工作,但这是一个3d数组。因为我正在处理另外4个矩阵,所以我不想每次都输入用于计算的数字。有没有更简单的方法
使用此函数,我计算了旋转矩阵:
def rotation_matrix(a,b):
v = np.cross(a, b)
sine = np.linalg.norm(v)
cos = np.dot(a, b)
vx = np.array([[0, -v[2], v[1]], [v[2], 0, -v[0]], [-v[1], v[0],0]])
R = np.eye(3) + vx + (np.dot(vx,vx) * (1-cos)/(sine**2) )
print(R)
运行以下命令:
matrix = rotation_matrix(vector_1, vector_2)
其中:
vector_1: (0.04105606809655358, 0.04476372266923052, 0.9981535996054132)
vector_2: (0.11214819423654286, -0.05596069534201273, 0.9921145010059682)
我的输出:R:
[[ 0.99742808 0.01090133 0.07084053]
[-0.00373406 0.99492706 -0.10052965]
[-0.07157707 0.10000657 0.99240889]]
现在要查找euler的角度:
angle_x = math.atan2(r32,r33 )
angle_y = math.atan2(-(r31), np.sqrt(r32**2 +r33**2))
angle_z = math.atan2(r21,r11)
我手动输入值,得到:
θ_x = 0.10043249283304505
θ_y = 0.07163832967532544
θ_z = -0.003743670977871371
所以我只想知道如何从矩阵中调用r32 r31
好的,首先,您给出的数据是一个2D数组,而不是一个3D数组
区别如下:
一维阵列
索引1处的数组的值为1。索引3处的数组的值为9。如果要将数组中的第三个值更新为8,则应执行以下操作
二维数组就是数组的数组。因此,必须给出两个参数才能访问单个值
如果要更新“second”值,必须执行以下操作
这是因为
two_dim_array[0]
是一个一维数组,您仍然需要指定一个索引来访问一个值从现在起,你可以用同样的推理继续深入。因为任何进一步的维度都是列表中的另一个级别。所以三维阵列应该是:
现在要访问您必须给出的值。。3个参数。因为
因此,如果必须调用每个元素,可以使用嵌套for循环
相关问题 更多 >
编程相关推荐