罗德里格斯公式不准确



罗德里格斯公式只对小角度有效吗?

我尝试使用维基百科中的罗德里格斯公式,先绕y轴旋转向量(1,0,0),然后绕z轴旋转(https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula)。

第一次绕y轴旋转10度似乎是可以的(v_r1 = 0.984807753012208 0 -0.173648177666930(。但如果我将v_r1绕z轴旋转10度,那么我会假设v_r2的y和z分量是相同的。这种情况适用于较小的α角和β角。

但是试着将α和β增加到例如60度。那么v_r2就没有意义了。

这让我思考:罗德里格斯公式只适用于小角度吗?罗德里格斯公式究竟是准确的,还是仅仅是一种假设?

您可以直接在matlab命令窗口中复制并粘贴以下代码,以了解我的意思:

alpha = deg2rad(10);
beta = deg2rad(10);
% origin vector:
v = [1;0;0];
% 1: rotate vector around y-axis:
y_axis = [0;1;0];
c1 = cross(y_axis,v); %cross product between rotation axis and vector
v_r1 = v.*cos(alpha)+(c1)*sin(alpha)+y_axis.*(y_axis.*v)*(1-cos(alpha));
% 2: rotate vector around z-axis:
z_axis = [0;0;1];
c2 = cross(z_axis,v_r1);
v_r2 = v_r1.*cos(beta)+(c2)*sin(beta)+z_axis.*(z_axis.*v_r1)*(1-cos(beta));
vector_length = sqrt((v_r2(1)^2)+(v_r2(2)^2)+(v_r2(3)^2));

谢谢。

三维中的旋转是不可交换的。你认为y和z分量应该相同的直觉是不正确的。在小角度极限中,非交换性很小。

想想你的x方向矢量,做90度旋转。绕y旋转会得到与z平行的东西,然后绕z旋转不会改变向量,所以你会得到与z平行的东西。反过来做,绕z旋转的第一个90度会得到与y平行的东西;然后绕y旋转不会影响它。所以,你会得到一个与z平行,另一个与y平行。

相关内容

  • 没有找到相关文章

最新更新