MATLAB-如何使用旋转矩阵旋转轨道/球体?
我尝试使用下面给出的旋转矩阵旋转“轨道”:MATLAB-如何使用旋转矩阵旋转轨道/球体?,matlab,matrix,rotation,orbit,Matlab,Matrix,Rotation,Orbit,我尝试使用下面给出的旋转矩阵旋转“轨道”: [cos(angle) -sin(angle) 0; sin(angle) cos (angle) 0; 0 0 1 ] 我想我应该做的第一件事是使用sphere(): 然后在向量中将x、y和z连接在一起: xyz = [x; y; z]; rotatMat = [cos(angle) -sin(angle) 0; sin(angle) cos (angle) 0; 0 0 1 ]; 将旋转矩阵
[cos(angle) -sin(angle) 0;
sin(angle) cos (angle) 0;
0 0 1 ]
我想我应该做的第一件事是使用sphere():
然后在向量中将x、y和z连接在一起:
xyz = [x; y; z];
rotatMat = [cos(angle) -sin(angle) 0; sin(angle) cos (angle) 0; 0 0 1 ];
将旋转矩阵和xyz相乘以旋转动态观察:
rotated = rotatMat .* xyz;
然而,xyz
原来是62x22
维度,而我的rotatMat
只是3x3
所以我不能将它们相乘
如何解决此问题
提前谢谢。矩阵乘法必须使用运算符,而不是元素乘法
此外,您的xyz
矩阵的大小应为n-x-3
(而不是62-x-22
),并且您必须使用xyz*rotatimat'
来正确匹配尺寸。或者,您可以使用大小为3×n的xyz
,并使用语法rotatMat*xyz
最棒的是,当我看到这个(+1)时,我正在键入我的答案。我希望你不会介意我的回答或多或少都是一样的(但带有代码)@LuisMendo没有pb的答案
xyz
应该有3列语法为xyz*rotatMat'
的列和3行语法为rotatMat*xyz
。输出应该是相同的(但转置)。是的,我意识到,这就是为什么我删除了我的评论。我更习惯于先使用变换矩阵,后使用坐标:-)@LuisMendo这很有趣,对我来说,按列使用xyz
坐标更自然,但这只是品味的问题!嗯,我认为更常见的是列向量带有[x;y;z]
,其中x
,y
z
是数字。例如,见。因此,如果有几个点,每个点都将是一列(x
,y
,z
将是向量)。当然,也可以反过来做
rotated = rotatMat .* xyz;
xyz = [x(:) y(:) z(:)].'; %'// put x, y, z as rows of a matrix
xyz_rotated = rotatMat*xyz %// use matrix multiplication
x_rotated = reshape(xyz_rotated(1,:), size(x)); %// reshape transformed rows
y_rotated = reshape(xyz_rotated(2,:), size(x));
z_rotated = reshape(xyz_rotated(3,:), size(x));