给定旋转的旋转矩阵是否唯一?
Is the rotation matrix unique for a given rotation?
我找到了两个旋转矩阵
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]
谁能解释一下?
非唯一性意味着等式 rot1 * v = rot2 * v 适用于每个向量 v。参见 this other answer
你实际上是在问两个问题。
旋转矩阵是否唯一?
是的,Francesco 引用的 this answer 解释得很好。如果它们不是唯一的,则 Qv = Rv 因此 (Q-R)*v = 0 对任何向量都是正确的。然而,后者仅适用于空矩阵。
这可能会帮助您查看两个旋转的 angle-axis 表示,看看它们是否不相同(格式为 x、y、z 和角度):
>> vrrotmat2vec(rot1)
0.5304 -0.5873 -0.6114 0.6022
>> vrrotmat2vec(rot2)
0.9707 -0.1700 0.1700 0.6734
或者,您可以查看旋转矩阵的每一行,它们代表旋转后的 spaces 的单位向量,并查看它们彼此不同。 (source,属性 3 和 4)
为什么这两个旋转矩阵对该向量给出相同的结果?
因为一个点可以通过无限多次旋转映射到另一个点。对于围绕同一个中心的任何两次旋转,一些点*最终会移动到同一个地方。如果愿意,rot1 和 rot2 将您的点 wpt 沿 3D 中的不同旋转弧移动到 cpt space。
由于此图在 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
* 我猜这些点恰好位于两条线上,但我无法支持。
我找到了两个旋转矩阵
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]
谁能解释一下?
非唯一性意味着等式 rot1 * v = rot2 * v 适用于每个向量 v。参见 this other answer
你实际上是在问两个问题。
旋转矩阵是否唯一?
是的,Francesco 引用的 this answer 解释得很好。如果它们不是唯一的,则 Qv = Rv 因此 (Q-R)*v = 0 对任何向量都是正确的。然而,后者仅适用于空矩阵。
这可能会帮助您查看两个旋转的 angle-axis 表示,看看它们是否不相同(格式为 x、y、z 和角度):
>> vrrotmat2vec(rot1)
0.5304 -0.5873 -0.6114 0.6022
>> vrrotmat2vec(rot2)
0.9707 -0.1700 0.1700 0.6734
或者,您可以查看旋转矩阵的每一行,它们代表旋转后的 spaces 的单位向量,并查看它们彼此不同。 (source,属性 3 和 4)
为什么这两个旋转矩阵对该向量给出相同的结果?
因为一个点可以通过无限多次旋转映射到另一个点。对于围绕同一个中心的任何两次旋转,一些点*最终会移动到同一个地方。如果愿意,rot1 和 rot2 将您的点 wpt 沿 3D 中的不同旋转弧移动到 cpt space。
由于此图在 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
* 我猜这些点恰好位于两条线上,但我无法支持。