旋转矩阵对于给定的旋转是否唯一?

3
我找到了两个旋转矩阵。
rot1 = [    0.8736    0.2915   -0.3897;
           -0.4011    0.8848   -0.2373;
            0.2756    0.3636    0.8898]

rot2 = [    0.9874   -0.1420   -0.0700;
            0.0700    0.7880   -0.6117;
            0.1420    0.5991    0.7880]

当对向量进行乘法运算时

wpt = [200 200 200] 

产生相同的结果

cpt = [155.0812 49.2660 305.8148] 

有谁能解释一下这个吗?
2个回答

5
您实际上在这里问了两个问题。
旋转矩阵是唯一的吗?
是的,正如Francesco引用的这篇答案所解释的那样.如果它们不是唯一的,则vQ = Rv,因此对于任何向量(Q-R)* v = 0都是成立的。然而,后者只适用于零矩阵。
您可以通过查看两个旋转的角轴表示来帮助自己看出它们不相同(格式为x,y,z和角度):
>> vrrotmat2vec(rot1)

    0.5304   -0.5873   -0.6114    0.6022

>> vrrotmat2vec(rot2)

    0.9707   -0.1700    0.1700    0.6734

或者,您可以查看旋转矩阵的每一行,它们代表旋转空间的单位向量,并且可以看到它们彼此不同。(来源,属性3和4)

为什么这两个旋转矩阵对于这个向量给出了相同的结果?

因为一个点可以被无限多次旋转映射到另一个点。对于任何围绕同一中心的两个旋转,某些点*最终移动到相同的位置。如果您愿意,rot1和rot2将您的点wpt沿着3D空间中的不同旋转弧线移动到cpt。

The rotation arcs and axes of your point and matrices

由于这个图在2D下并不有用,而且您似乎可以使用MATLAB,因此您可以使用以下代码生成该图并在其周围移动:

vr1 = vrrotmat2vec(rot1);
vr2 = vrrotmat2vec(rot2);
v = [1;1;1];
arc1 = [];
arc2 = [];
for i = 1:50
    a = vrrotvec2mat([vr1(1:3) i*vr1(4)/50]);
    arc1 = [arc1; (a*v)'];
    a = vrrotvec2mat([vr2(1:3) i*vr2(4)/50]);
    arc2 = [arc2; (a*v)'];
end

%% Drawing
% Arcs
plot3(arc1(:,1), arc1(:,2), arc1(:,3))
hold on
plot3(arc2(:,1), arc2(:,2), arc2(:,3))

% Unit vectors
arrow([0 0 0], [1 0 0]);
arrow([0 0 0], [0 1 0]);
arrow([0 0 0], [0 0 1]);

% Rotation axes
arrow([0 0 0], vr1(1:3), 'EdgeColor','b','FaceColor','g');
arrow([0 0 0], vr2(1:3), 'EdgeColor','r','FaceColor','g');

axis square

* 我猜测这些点位于两条直线上,但我无法证实。


0

非唯一性意味着等式 rot1 * v = rot2 * v 对于每个向量 v 都成立。请参见此其他答案


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接