3D 繪圖:plot3
以 a 當 X 軸、b 當 Y 軸、c 當 Z 軸,就可以畫出酷酷的三維線段圖咯!
- a =
- b =
- c =
a = sqrt(t) .* sin(3*t);
b = sqrt(t) .* cos(3*t);
c = exp((-t)/pi);
plot3(a,b,c)

網狀 3D 繪圖:mesh
如果說覺得單純線段長的 3D 圖形不好看,那你一定要試試看酷酷的網格 3D 繪圖。
在這之前,先介紹兩個函數:meshgrid
跟 mesh
- [X,Y] =
meshgrid(x,y)
:將 x 向量跟 y 向量合成成一個二維座標系 [X,Y],其中 X 及 Y 分別是length(y)
行(高)跟length(x)
列(寬)- 假設今天 x = 1:4; y = -1:-1:-3; ,那
[X,Y] = meshgrid(x,y)
的 X 及 Y 就會是下圖所示
- 假設今天 x = 1:4; y = -1:-1:-3; ,那

mesh(X,Y,Z)
:利用 X,Y,Z 三個二為坐標系變數形成一個三維網狀圖
x = 1:5;
y = -1:-1:-5;
z = 1:5;
[X,Y] = meshgrid(x,y);
Z = meshgrid(z);
mesh(X,Y,Z)

x = linspace(-4,4,100);
[X,Y] = meshgrid(x); % 等同於meshgrid(x,x)
F = (1/2*pi) * exp( X.^2+Y.^2 / (-2)); % .^ 意思是將矩陣中每個元素^2,而不是整個陣列^2
mesh(X,Y, F)

mesh vs surf:網格與曲面的差別
下圖是 mesh 與 surf 透過同樣的 x、y、z 值繪製的 3D 圖形,唯一不同的點為 mesh 上色方式為「網狀」而 surf 則是以「面」來繪製。上色策略以高度而定,相同 z 值顏色相同。

x = linspace(-2, 2, 25); % 在 x 軸 [-2,2] 之間取 25 點
y = linspace(-2, 2, 25); % 在 y 軸 [-2,2] 之間取 25 點
[xx, yy] = meshgrid(x, y); % xx 和 yy 都是 25×25 的矩陣
zz = xx.*exp(-xx.^2-yy.^2); % 計算函數值,zz 也是 25×25 的矩陣
figure('Name','Mesh vs Surf','NumberTitle','off'); % 創建窗格,命名成 Mesh vs Surf
subplot(1,2,1);mesh(xx, yy, zz); % 畫出立體網狀圖
subplot(1,2,2);surf(xx, yy, zz); % 畫出立體曲面圖
把 mesh 變得跟 surf 一樣
雖然沒啥路用,純粹知道其他參數的用意

[xx,yy,zz] = peaks(25);
figure('Name','Mesh vs Surf','NumberTitle','off');
subplot(1,2,1);mesh(xx, yy, zz,'FaceColor','flat','EdgeColor','black');colorbar;
subplot(1,2,2);surf(xx, yy, zz);colorbar;
colormap('jet');
peaks(N)
:生成 NxN 的二維矩陣,懶惰一點連 N 也可以不打,直接[xx,yy,zz] = peaks()
,peaks 的方程式為figure
:創建一個新的視窗,並且透過Name
設定視窗名稱、NumberTitle
設定為 off 來去隱藏醜醜的 figure 0 之類的文字。subplot
:於 這篇 有提到,主要作為多圖表共存一視窗處理。mesh
:繪製 3D 網格圖形,可以透過修改FaceColor
為 flat(一個區塊一種顏色)以及EdgeColor
邊線顏色為黑色,來達到外表跟 surf 差不多的功能。