2014-09-20 158 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]