如何使用矩阵在matlab中旋转圆柱体?

时间:2014-07-10 17:41:11

标签: matlab matrix rotation geometry

所以,我对MatLab来说真的很新,我试图使用[X Y Z] = cylinder;创建一个圆柱体。然后我得到了这3个矩阵:X Y和{{ 1}}如果我Z它们会产生一个实际的圆柱体。现在,我需要做的是将mesh圆柱体在[X Y Z]轴上顺时针旋转90度。我知道有一个名为y的命令,但我的老师要我明确使用旋转和转换矩阵。我怎样才能创建这些矩阵并将它们乘以圆柱?是否有更好的方法来制作圆柱体?我真的不习惯matlab,如果你能以详细的形式解释,我会非常感激。

1 个答案:

答案 0 :(得分:2)

你应该使用R ^ 3的旋转矩阵作为线性映射。 MATLAB中有内置的功能,但我猜你不允许使用它们。

这是一个快速而肮脏的解决方案:

[X Y Z] = cylinder;
figure;
surf(X,Y,Z);

% set up rotation matrix:
angle_in_degrees = 90;
angle_in_rad = angle_in_degrees* pi/180;
rotationMatrix = [cos(angle_in_rad) 0 sin(angle_in_rad); 0 1 0; -sin(angle_in_rad) 0 cos(angle_in_rad)];

% get points at the two rings and rotate them separately:
positionOld1 = [X(1,:)',Y(1,:)',Z(1,:)'];
positionOld2 = [X(2,:)',Y(2,:)',Z(2,:)'];
positionNew1 = positionOld1*rotationMatrix;
positionNew2 = positionOld2*rotationMatrix;

% reassemble the two sets of points into X Y Z format:
X = [positionNew1(:,1),positionNew2(:,1)];
Y = [positionNew1(:,2),positionNew2(:,2)];
Z = [positionNew1(:,3),positionNew2(:,3)];

figure;
surf(X,Y,Z);