罗德里格斯公式不准确?

Rodrigues formula not accurate?

罗德里格斯公式是否只适用于小角度?

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

第一次绕y轴旋转10度似乎没问题(v_r1 = 0.984807753012208 0 -0.173648177666930)。 但是如果我绕 z 轴旋转 v_r1 10 度,那么我会假设 v_r2 的 y 和 z 分量是相同的。这是小的 alpha 和 beta 角的情况。

但尝试将 alpha 和 beta 增加到例如60 度。那么v_r2就没有意义了。

这让我想到:罗德里格斯公式是否只适用于小角度?罗德里格斯公式是真的准确还是只是一个假设?

您可以将以下代码直接复制并粘贴到您的 matlab 命令中 window 以了解我的意思:

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));

谢谢。

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

想想你的 x 方向向量并进行 90 度旋转。绕 y 旋转得到平行于 z 的东西,然后绕 z 旋转不会改变矢量,所以你得到平行于 z 的东西。反过来做,第一个关于 z 的 90 度旋转给出平行于 y 的东西,然后围绕 y 旋转不会影响它。所以你有一个顺序与 z 平行的东西,另一个顺序与 y 平行的东西。