当坐标为MATLAB样式(X,Y和Z保存在不同的数组中)时,如何围绕三个轴中的每个轴旋转3D对象。
此代码是一个开始。我想我已找到rotation matrix(围绕x的pi / 2旋转),这里称为rotX90_2。但是rotX90_2应该如何在X,Y,Z上运行?
[X,Y,Z] = cylinder;
% rotX90_1 = makehgtform('xrotate',pi/2) gives
rotX90_1 = ...
[1 0 0 0;
0 0 -1 0;
0 1 0 0;
0 0 0 1];
rotX90_2 = rotX90_1(1:3, 1:3);
% Here rotX90_2 should operate on [X,Y,Z] in order to ...
% rotate it 90 degrees around x, but how is this done?
% == What code should be put here to rotate the cylinder? ==
surf(X,Y,Z);
我刚开始使用MATLAB。据我所知,操作3D图形的基本方法是在X,Y,Z上操作,就像这里或一样,你可以先运行像h = surf(X, Y, Z);
这样的图形例程然后再操作图形对象,使用f.ex. hgtransform。
使用X,Y,Z进行平移和缩放很方便。 - 您只需添加和乘以标量。但我问这个问题是为了解如何旋转。
另一方面,如果对图形对象进行操作,则可以使用hgtransform函数。但是你必须首先创建其他对象,因为hgtransform不能直接对图形对象进行操作,正如我所理解的那样。 (除了像rotatex(h, angle)
。F.ex这样的函数,我没有找到相应的“translatex(h,distance)”。这让我感到惊讶。也许我看起来不太好。)
好的我是新来的。任何简单实用的指针如何轻松旋转,缩放和平移MATLAB 3D坐标/对象(围绕坐标系轴)将不胜感激。
修改:
根据下面的Prakhar的答案,可以填补上述空白的代码如下。谢谢你,Prakhar。
[row, col] = size(X);
coordinates = [reshape(X, [row*col, 1]), reshape(Y, [row*col, 1]), reshape(Z, [row*col, 1])];
rC = coordinates * rotX90_2;
X = reshape(rC(:, 1), [row, col]);
Y = reshape(rC(:, 2), [row, col]);
Z = reshape(rC(:, 3), [row, col]);
答案 0 :(得分:2)
假设R是适当的3x3旋转矩阵。
coordinates = [X Y Z];
rotatedCoordinates = coordinates * R;
(假设X,Y和Z是相同大小的列向量)
现在,您可以分别从rotateCoordinates获取新的X,Y和Z坐标作为rotateCoordinates(:,1),rotatingCoordinates(:,2)和rotatingCoordinates(:,3)。
编辑:当X,Y,Z为二维矩阵时的另一种选择:
[X, Y, Z] = cylinder;
[row, col] = size(X);
coordinates = [reshape(X, [row*col, 1]), reshape(Y, [row*col, 1]), reshape(Z, [row*col, 1])];
rC = coordinates*R;
Xn = reshape(rC(:, 1), [row, col]);
Yn = reshape(rC(:, 2), [row, col]);
Zn = reshape(rC(:, 3), [row, col]);