罗德里格斯公式只对小角度有效吗?
我尝试使用维基百科中的罗德里格斯公式,先绕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平行。