在MATLAB中旋转3D图形

时间:2014-09-20 22:45:55

标签: matlab graphics 3d geometry-surface

我在matlab中生成了一个3D表面。

clear all;
close all;
clc;

x = [1:0.1:5];
y=[1:50];  
[n1 n2] = size(x);
[m1, m2] = size(y);

for i = 1 : m2
    for j = 1 : n2

        z(i,j) = (x(1,j)) / (y(1,i));           
    end
end
[x, y] = meshgrid(x, y);

surf(y, x, z)
colorbar
xlabel('x')
ylabel('y')
zlabel('z')

我得到了以下绘制的表面:

enter image description here

我现在感兴趣的是顺时针旋转四分之一转的立方体。我知道我可以使用" rotate3d on"并选择最好的 Az EI ,但我不明白什么是 Az EI 和怎么应该等于回应我的需要呢?

例如:

enter image description here

还有另一个名为camroll()的函数。但我不知道()中的值必须在顺时针方向旋转四分之一转的立方体。 90度是正确答案吗?

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

要旋转图形轴,您可以使用视图命令:

surf(rand(20))
for az = 360:-1:-0
    view(az, 30)
    pause(0.01)
end

Azimus的值介于0°和360°之间。要以逆时针方向将轴图形旋转90°,您可以选择方位角:[270,180,90,0]

答案 1 :(得分:1)

正如@ASantosRibeiro所提到的,旋转功能将产生你想要的输出。顺便说一下,这里是代码的矢量化版本,如果你有一个非常大的数据集,你会发现它很有用。

x = 1:0.1:5;
y=1:50;  

X = repmat(x',1,size(y,2)).';
Y = repmat(y',1,size(x,2));
Z = X./Y;

figure
hSurf = surf(Y,X,Z);

rotate(hSurf,[1,0,0],45) % As proposed by @ASantosRibeiro

colorbar
xlabel('x')
ylabel('y')
zlabel('z')

repmat函数用于复制x和y,以便形成具有正确大小的X和Y,以允许彼此分开以形成Z.此操作非常类似于在代码中调用meshgrid。对于像您的示例中的小数据集,两种方法(在我的笔记本电脑上)的运行时间相似,但是当我使用x = 1:0.1:500和y = 1:500时,矢量化版本的时间减少了3倍,所以看看它可能是值得的。

希望能帮到你!