matlab的一些考點3matlab繪圖——三維繪圖

三維曲線

plot3函數

  • plot(x,y,z)
    情況一: x,y,z通常爲長度相等的向量
    情況二: x,y,z爲同行矩陣時,則以對應列元素繪製曲線,曲線條數等於矩陣列數。
    情況三: 當x,y,z中有向量也有矩陣時,行向量的長度必須與矩陣列數相同。列向量的長度與矩陣行數相同。
    情況四: 含多組輸入參數的plot3函數。
    plot3(x1,y1,z1,x2,y2,z2,x3,y3,z3……xn,yn,zn);
    每一組向量繪製一條曲線。
    情況四: plot(x,y,z,選項)

下面是對應的一些例子。

情況一:

t=linspace(0,10*pi,200);
x=sin(t)+t.*cos(t);
y=cos(t)-t.*sin(t);
z=t;
subplot(2,1,1);
plot3(x,y,z);
grid on
subplot(2,1,2);
plot3(x(1:4:200),y(1:4:200),z(1:4:200));%分別在x,y,z座標中每隔4個點取一個點。所以看起來比較粗糙
grid on

在這裏插入圖片描述

情況
t=0:0.001:2*pi;
t=t';%轉置
x=[t,t,t,t,t];%寫成x=t也行
y=[sin(t),sin(t)+1,sin(t)+2,sin(t)+3,sin(t)+4];
z=[t,t,t,t,t];
plot3(x,y,z);

在這裏插入圖片描述

情況四:
t1=0:0.001:2*pi;
t2=0:0.001:4*pi;
t3=0:0.001:6*pi;
plot3(t1,sin(t1),t1,t2,sin(t2)+1,t2,t3,sin(t3)+2,t3);

在這裏插入圖片描述

fplot函數

  • 調用格式:fplot(funx,funy,funz,tlims)
    tlims:表示參數函數自變量的取值範圍,用二元向量[tmin,tmax]描述,默認爲[-5,5]

ps:因爲版本原因,我並沒有做出來,可以換更高版本的。(我的版本是2015b的)

%墨西哥帽頂曲線
xt=@(t)exp(-t/10).*sin(5*t);
yt=@(t)exp(-t/10).*cos(5*t);
zt=@(t)t;
fplot3(xt,yt,zt,[-12,12]);
使用句柄形式

三維曲面

平面網格數據的生成

(1)利用矩陣運算生成

x=2:6;
y=(3:8)';
X=ones(size(y))*x;%矩陣的每一行都是向量x,行數=向量y的元素個數
Y=y*ones(size(x));%每一列都是向量y,列數=向量x的個數
grid on

在這裏插入圖片描述

(2)利用meshgrid函數生成

[X,Y]=meshgrid(x,y)
其中x、y是向量(當x、y相同時可簡寫爲x),存儲網格點的座標X、Y爲矩陣
例一、

x=2:6;
y=(3:8)';
[X,Y]=meshgird(x,y);

例二、

x=2:6;
y=(3:8)';
[X,Y]=meshgrid(x,y);
Z=randn(size(X));
plot3(X,Y,Z);
grid on

在這裏插入圖片描述

繪製三維曲面的函數

mesh函數

  • 補面無顏色
  • 具有等高線的三維曲面網格曲面函數meshc
  • 帶有底座的三維網絡曲面函數meshz

surf函數

  • 補面有顏色
  • 具有等高線的曲面函數surfc
  • 具有光照效果的曲面函數surfl
    (這些特殊函數見例二)
    兩者調用格式差不多:
    (1)mesh/surf(x,y,z,c)
  • x,y,z是同型矩陣
  • x,y是網格座標矩陣
  • z是網格上的高度矩陣
  • c用於指定不同高度下曲面顏色(省略時默認c=z,即顏色正比於高度)
    (2)mesh/surf(z,c)
  • 當x,y省略時z矩陣的第二位座標當作x軸下標z矩陣的第一維下表當作y軸座標。
    (看到這裏小小的你眼中是不是充滿大大的❓❓❓我現在也是。下面通過一個例子理解一下見例三)

下面比較以下mesh、surf、plot3三者之間的區別

1
t=-2:0.2:2;
[X,Y]=meshgrid(t);
Z=X.*exp(-X.^2-Y.^2);
subplot(1,3,1);
mesh(X,Y,Z);
title('mesh')
subplot(1,3,2);
surf(X,Y,Z);
title('surf');
subplot(1,3,3);
plot3(X,Y,Z);
grid on
title('plot3')

在這裏插入圖片描述

例二:
[x,y]=meshgrid(0:0.1:2,1:0.1:3);%
z=(x-1).^2+(y-2).^2-1;

subplot(2,2,1);
meshc(x,y,z);
title('meshc');

subplot(2,2,2);
meshz(x,y,z);
title('meshz');

subplot(2,2,3);
surfc(x,y,z);
title('surfc');

subplot(2,2,4);
surfl(x,y,z);
title('surfl');

在這裏插入圖片描述

例三:
t=1:5;
z=[0.5*t;2*t;3*t];
mesh(z);
xlabel('x');%x座標是z元素的列下標
ylabel('y');%y座標是z元素的行下標
zlabel('z');

如果還是不明白就看看具體的數據吧!(用鼠標寫的字有點小丑)
在這裏插入圖片描述
在這裏插入圖片描述

繪製三維曲面

sphere函數

[x,y,z]=sphere(n) 繪製三維球面

  • 產生三個n+1階方陣可以繪製出圓心在原點半徑爲一的單位球。
  • 若不帶輸出參數則直接繪製一個球面。
  • n表示這個球的圓滑程度(講人話就是採樣點的多少,過少的話就會變成多面體。)

cylinder函數

[x,y,z]=cylinder(R,n) 繪製三維柱面

  • R是一個向量存放各個等間隔面的半徑,直白點講就是這個函數也可以畫出圓錐、臺體……(R爲標量時產生一個圓柱)
  • n表示在同一面內的採樣點,過少就會變成多邊形(默認爲20個間隔點)
subplot(1,3,1);
[x,y,z]=cylinder;%默認
surf(x,y,z);
title('圓柱')
subplot(1,3,2);
t=linspace(0,2*pi,40);
[x,y,z]=cylinder(2+cos(t),30);
surf(x,y,z);
title('花瓶');
subplot(1,3,3)
[x,y,z]=cylinder(0:0.2:2,30);
surf(x,y,z);
title('錐面')

在這裏插入圖片描述

%繪製兩個直徑相等且相交的圓柱
[x,y,z]=cylinder(1,60);
z=[-1*z(2,:);z(2,:)];%z矩陣的第一行全爲-1,第二行全爲1
surf(x,y,z);
hold on
surf(y,z,x);
axis equal

在這裏插入圖片描述

peaks函數

生成的矩陣可以作爲mesh和surf的參數,繪製多峯函數曲面圖
在這裏插入圖片描述
調用格式:

  • peaks(n) n爲標量,生成n階方陣
  • peaks(V) V是關於x,y的矩陣
  • peaks(x,y)
    用以上兩個方法時,將x,y帶入上面表達式得出z的值
  • peaks 默認等分數爲48生成49階方陣

fmesh函數和fsurf函數

用於解決參數方程有關的問題
在這裏插入圖片描述

funx=@(u,v)u.*sin(v);
funy=@(u,v)-u.*cos(v);
funz=@(u,v)v;
fsurf(funx,funy,funz,[-5,5,-2,2])
hold on
fmesh(funx,funy,funz,[-5,5,-2,2])
hold off

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章