当前位置:文档之家› Matlab 三维 图形

Matlab 三维 图形

在上述範例中,X 軸對應到矩陣 z 的直行索引,Y 軸則對應到橫列索引,換句話說,在上述圖形中,當 x = j 且 y = i 時,所對應的高度是 z(i, j)

若要將與曲面對應的 x 座標和 y 座標都一併畫出來,還是可以使用令,例如我們可以畫出曲面z = xy在 [3,6] 及 [5,9] 範圍內的網狀圖:

plotxyz011.m

[xx, yy] = meshgrid(x, y); % xx 和 yy 都是矩陣

zz = xx.*yy; % 計算函數值 zz,也是矩陣

subplot(2,2,1); mesh(xx);

在上述範例中,meshgrid 的作用是產生 x 及 y (均為向量)為基準的格子點Grid Points),其輸出為 xx 及 yy(均為矩陣),分別代表格子點的座標。

在下列範例中,我們使用linspace 來產生較密集的資料,以便畫出由函數形成的立體網狀圖:

plotxyz01.m

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 的矩陣

mesh(xx, yy, zz); % 畫出立體網狀圖

mesh 指令的用法類似:

plotxyz02.m

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×2 的矩陣

surf(xx, yy, zz); % 畫出立體曲面圖

要畫出此函數的最快方法,即是在 MATLAB 命令視窗直接鍵入

到下列方程式與圖形:

我們亦可對peaks 指令取點,再以各種不同方法進行繪圖,相關細節可由help peaks」而查到線上支援。

在上例中,“axis tight"會將圖軸在 x、y、z 方向的範圍定為圖形資料在

方向的極大值及極小值,因此會使圖形“塞滿"整個圖軸。使用「axis([-inf, inf, -inf, inf, -inf, inf])」可以達到相同的效果。

指令可在 x 方向或 y 方向產生水流效果:

plotxyz04.m

[x, y, z] = peaks;

waterfall(x,y,z);

axis tight;

可同時畫出網狀圖與「等高線」(Contours):plotxyz05.m

[x, y, z] = peaks;

meshc(x, y, z);

axis tight;

下一個範例可同時畫出兩條三度空間中的曲線:

:plotxyz07.m

t = linspace(0, 10*pi, 501);

plot3(t.*sin(t), t.*cos(t), t, t.*sin(t), t.*cos(t), -t); % 同時畫兩條曲線

如果輸入引數是三個大小相同的矩陣 x、y、z,那麼 plot3 會依序畫出每個行向量在三度空間所對應的曲線,如下:

:plotxyz08.m

[x, y] = meshgrid(-2:0.1:2);

z = y.*exp(-x.^2-y.^2);

plot3(x, y, z);

、z 代表資料點(或取樣點),而 X、Y、Z 則代表根據資料點進行內插法所得到的格子點,以畫出上面的網狀圖。有關於曲線及曲面的內插,可參見本書姊妹作「MATLAB 程式設計:進階篇」第九章「內差法」。

很難想像這些簡單的函數可以產生如此複雜的曲面吧?

立體圖形與圖軸的基本技巧

在繪製網狀圖時,MATLAB 會隱藏被遮蓋的網線,若要使被遮蓋的網線亦能呈現出來,可用 hidden off 指令,如下:

:plotxyz10.m

[x,y,z] = peaks;

mesh(x,y,z);

hidden off

axis tight

hidden on,則恢復原先的設定。此種以 on 或 off 來進行兩段式切換的指令可列表如下。

on/off 來切換的指令

說明

隱藏(on)或顯示(off)被遮蓋的網線。

允許(on)或取消(off)以滑鼠點選來放大圖形。

rotate3d on/off允許(on)或取消(off)以滑鼠點選來旋轉三維圖軸。

顯示(on)或不顯示(off)圖軸。

顯示(on)或不顯示(off)圖軸的外框。

在繪製新圖時,保留(on)或消去(off)舊圖。

允許(on)或不允許(off)指令視窗的輸出暫停。

允許(on)或不允許(off)指令在檔案內執行時,逐一顯示在視窗。

例如,若要能夠旋轉立體圖形,可以在產生 3D 圖形之後(例如輸入

後),再輸入「rotate3d on」,此時您可以壓下滑鼠左鍵來拖曳圖軸,以選取最理想的觀測角度。(你也可以點選圖形視窗上面的圖示,就可以開始旋轉立體圖形。)

對二維圖形而言,預設值為 Azimuth = 0°,Elevation =

Azimuth = -37.5°,Elevation = 30°。若要改變觀測角度,可用plotxyz11.m

如上圖所示,colorbar 可以顯示高度與顏色的對照長條圖,而曲面上每一個小方塊的顏色即根據此對照圖而得出。事實上,顏色與高度的對應關係是由一個「顏色對應表」(Colormap,或簡稱「色表」或「色盤」)來控制,此表

3 的矩陣,m 的值通常是 64,代表真正用到的顏色個數,而每一列代表一個顏色的 RGB 值,一些常用的值可列表如下:

整理:常用顏色的 RGB 成分

顏色Red(紅色)Green(綠色)Blue(藍色)

000

(白)111

100

(綠)010

在上述範例中,我們使用亂數來產生一個 64×3 顏色對應表,因此曲面看起來並不是很賞心悅目。事實上,要產生一個好看的顏色對應表並不是件容易的 MATLAB 有一些現成的顏色對應表,整理如下:

MATLAB 現成的顏色對照表

指令說明

HSV 的顏色對應表(預設值)

代表“熱"的顏色對應表

代表“冷"的顏色對應表

colormap summer代表“夏天"的顏色對應表

colormap gray代表“灰階"的顏色對應表

colormap copper代表“銅色"的顏色對應表

colormap autumn代表“秋天"的顏色對應表

colormap winter代表“冬天"的顏色對應表

colormap spring代表“春天"的顏色對應表

colormap bone代表“X光片"的顏色對應表

colormap pink代表“粉紅"的顏色對應表

代表“旗幟"的顏色對應表

除了以高度來設定顏色之外,surf 及mesh 指令都可以接受第

引數來作為設定顏色的依據。例如,若要以曲面的斜率(即「梯度」或」)來設定顏色,可進行如下:

:plotxyz15.m

[X, Y, Z] = peaks;

surf(X, Y, Z, gradient(Z));

axis tight;

colormap hot

相关主题
文本预览
相关文档 最新文档