簡體   English   中英

在MATLAB中旋轉3D圖形

[英]Rotating a 3D figure in MATLAB

我在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')

我得到以下繪制的表面:

在此處輸入圖片說明

我現在有興趣按順時針方向旋轉四分之一轉 我知道我可以使用“ rotate3d on ”並選擇最佳的AzEI ,但是我不知道什么是AzEI以及應該如何滿足我的需求?

例如:

在此處輸入圖片說明

還有另一個函數叫做camroll() 但是我不知道()中的值是什么,才能按順時針方向旋轉四分之一圈。 90度是正確的答案嗎?

任何幫助將不勝感激!

要旋轉圖形軸,可以使用view命令:

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

Azimus的值介於0°和360°之間。 要將軸圖形沿逆時針方向旋轉90°,您可以選擇以下方位角:[270,180,90,0]

正如@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倍,因此值得一看。

希望對您有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM