2014-09-20 162 views
0

我在matlab中生成了3D曲面。在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”,并选择最佳了AzEI,但我不明白什么是了AzEI,应该如何等于我的需求作出反应?

例如:

enter image description here

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

任何帮助将非常感激!

+1

为什么不做一个简单的测试?旋转一个角度,你知道它应该如何表现,并推断出你需要的。 – ASantosRibeiro 2014-09-20 22:52:09

+0

首先,感谢您的回答:),我只是想按顺时针方向旋转四分之一圈的立方体。但是如何在使用“rotate3d”时选择Az和AI。 – Christina 2014-09-20 22:54:06

+0

检查matlab的旋转函数。你有3个方向,所以你有3个顺时针方向。如果你想在x轴上旋转45度,你可以旋转(h,[1,0,0],45)。希望它有帮助 – ASantosRibeiro 2014-09-20 23:04:19

回答

1

as @ASantosRibeiro提到,rotate函数会产生你想要的输出。另外,这里是代码的矢量化版本,如果您有更大的数据集,您可能会发现它很有用。

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倍,所以看看它可能是值得的。

希望能帮到你!

+0

虽然小心。旋转功能将旋转_object_,而不是视图(摄像机角度)。这意味着所有的数据点实际上都会改变坐标。如果最终用途仅用于此可视化,则不会造成问题,但如果您打算稍后检索对象的坐标,则会产生后果。否则,'repmat'指针的工作很好;-) – Hoki 2014-09-21 13:09:19

+0

哦,是的,你是如此正确,谢谢指出:) – 2014-09-21 14:50:37

2

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

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

Azimus具有0°到360°之间的值。要将轴图逆时针方向旋转90°,请选择以下方位角:[270,180,90,0]