[英]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
”並選擇最佳的Az和EI ,但是我不知道什么是Az和EI以及應該如何滿足我的需求?
例如:
還有另一個函數叫做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.