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