matlab 三維立體繪圖

39
MATLAB 三三三 三三

Upload: mabli

Post on 06-Jan-2016

108 views

Category:

Documents


0 download

DESCRIPTION

MATLAB 三維立體繪圖. 今天會用到大小為 m×n 的矩陣. 在每一橫列結尾加上分號( ; ),例如: >> A = [1 2 3 4; 5 6 7 8; 9 10 11 12]; % 建立 3×4 的矩陣 A >> A % 顯示矩陣 A 的內容 A = 1 2 3 4 5 6 7 8 9 10 11 12 [1 2 3 4] 等同於 [1,2,3,4] 但不同於 [1;2;3;4]. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: MATLAB  三維立體繪圖

MATLAB 三維立體繪圖

Page 2: MATLAB  三維立體繪圖

今天會用到大小為 m×n 的矩陣

在每一橫列結尾加上分號( ; ),例如:

>> A = [1 2 3 4; 5 6 7 8; 9 10 11 12]; % 建立 3×4 的矩陣 A

>> A % 顯示矩陣 A 的內容A = 1 2 3 4 5 6 7 8 9 10 11 12

[1 2 3 4] 等同於 [1,2,3,4] 但不同於 [1;2;3;4]

Page 3: MATLAB  三維立體繪圖

+ - * / ^ default Matrix.+ .- .* ./ .^ elememt to element

設 A=[1 2 3 4]; B=[5 6 7 8] 則 A*B= ?

執行結果: ??? Error using ==> * Inner matrix dimensions must agree.

設 A=[1 2 3 4]; B=[5 ;6; 7; 8] 則 A.*B= ?

執行結果:

??? Error using ==> .*

Matrix dimensions must agree.

Page 4: MATLAB  三維立體繪圖

設 A=[1 2 3 4]; B=[5 6 7 8] 則 A.*B= ? ans = 5 12 21 32

設 A=[1 2 3 4]; B=[5 ;6; 7; 8] 則 A*B= ?

ans =

70

設 A=[1 2 3 4]; B=[5 ,6, 7, 8]

則 A.*B= ?

ans =

5 12 21 32

Page 5: MATLAB  三維立體繪圖

基本立體繪圖指令 mesh 和 surf :

mesh :可畫出立體的「網狀圖」( Mesh Plots )

surf :可畫出立體的「曲面圖」( Surface Plots )

Page 6: MATLAB  三維立體繪圖

z = [0 2 1; 3 2 4; 4 4 4; 7 6 8];

Page 7: MATLAB  三維立體繪圖

z = [0 2 1; 3 2 4; 4 4 4; 7 6 8];mesh(z);xlabel('X 軸 = columnn index');ylabel('Y 軸 = row index');

Page 8: MATLAB  三維立體繪圖

meshgrid

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

Page 9: MATLAB  三維立體繪圖

x = 3:6;y = 5:9;[xx, yy] = meshgrid(x, y); % xx 和 yy 都是矩陣

xx =

3 4 5 6 3 4 5 6 3 4 5 6 3 4 5 6 3 4 5 6

yy =

5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 8 9 9 9 9

Page 10: MATLAB  三維立體繪圖

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

zz =

15 20 25 30 18 24 30 36 21 28 35 42 24 32 40 48 27 36 45 54

xx =

3 4 5 6 3 4 5 6 3 4 5 6 3 4 5 6 3 4 5 6

yy =

5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 8 9 9 9 9

Page 11: MATLAB  三維立體繪圖

注意 meshgrid(x)和meshgrid(x,y) 之不同

>> x = 3:6; >> y = 5:9; >> xx=meshgrid(x)

xx =

3 4 5 6 3 4 5 6 3 4 5 6 3 4 5 6

>> yy=meshgrid(y)

yy =

5 6 7 8 9 5 6 7 8 9 5 6 7 8 9 5 6 7 8 9 5 6 7 8 9

>> x = 3:6; >> y = 5:9; >> [xx,yy]=meshgrid(x,y)

xx =

3 4 5 6 3 4 5 6 3 4 5 6 3 4 5 6 3 4 5 6

yy =

5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 8 9 9 9 9

Page 12: MATLAB  三維立體繪圖

4-1 基本立體繪圖指令 範例 4-3 : plotxyz011.m x = 3:6;

y = 5:9;

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

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

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

title('xx'); axis tight

subplot(2,2,2); mesh(yy);

title('yy'); axis tight

subplot(2,2,3); mesh(xx, yy, zz);

title('zz 對 xx 及 yy 作圖 '); axis tight

colormap(zeros(1,3)); % 以黑色呈現

Page 13: MATLAB  三維立體繪圖

mesh(xx), mesh(yy) and mesh(xx,yy,zz)

xx = 3 4 5 6 3 4 5 6 3 4 5 6 3 4 5 6 3 4 5 6

yy = 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 8 9 9 9 9

zz =

15 20 25 30 18 24 30 36 21 28 35 42 24 32 40 48 27 36 45 54

Page 14: MATLAB  三維立體繪圖

使用 linspace 來產生較密集的資料,以便畫出由函數形成的立體網狀圖

Point-to-Point

zz = xx.*exp(-xx.^2-yy.^2) zz =

-0.0007 -0.0067 0 0.0067 0.0007 -0.0135 -0.1353 0 0.1353 0.0135 -0.0366 -0.3679 0 0.3679 0.0366 -0.0135 -0.1353 0 0.1353 0.0135 -0.0007 -0.0067 0 0.0067 0.0007

>> x = linspace(-2, 2, 5); >> y = linspace(-2, 2, 5); [xx, yy] = meshgrid(x, y)

xx =

-2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2

yy =

-2 -2 -2 -2 -2 -1 -1 -1 -1 -1 0 0 0 0 0 1 1 1 1 1 2 2 2 2 2

Page 15: MATLAB  三維立體繪圖

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); % 畫出立體網狀圖

Page 16: MATLAB  三維立體繪圖

x = linspace(-2, 2, 25);

y = linspace(-2, 2, 25);

[xx,yy] = meshgrid(x, y);

zz = xx.*exp(-xx.^2-yy.^2);

surf(xx, yy, zz);

surf 和 mesh 指令的用法類似

Page 17: MATLAB  三維立體繪圖

4-1 基本立體繪圖指令 peaks :

為了方便測試立體繪圖,MATLAB 提供了一個peaks 函數,可產生一個凹凸有致的曲面,包含了三個局部極大點( Local Maxima)及三個局部極小點( Local Minima)

其方程式為:

222222 )1(53)1(2

3

1)

5(10)1(3 yxyxyx eeyxx

exz

Page 18: MATLAB  三維立體繪圖

4-1 基本立體繪圖指令 畫出此函數的最快方法,即是在 MATLAB 命令視窗直接鍵入 peaks ,可得到下列方程式

>>z = 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) ...

- 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) ...

- 1/3*exp(-(x+1).^2 - y.^2)

>>[x, y, z] = peaks;

>>meshz(x,y,z)

Page 19: MATLAB  三維立體繪圖

4-1 基本立體繪圖指令 peaks 的圖形

Page 20: MATLAB  三維立體繪圖

meshz 指令有將曲面加上「圍裙」或「舞台」

[x, y, z] = peaks;

meshz(x,y,z);

axis tight;

Page 21: MATLAB  三維立體繪圖

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

[x, y, z] = peaks;

waterfall(x,y,z);

axis tight;

Page 22: MATLAB  三維立體繪圖

meshc 可同時畫出網狀圖與「等高線」( Contours )

[x, y, z] = peaks;

meshc(x, y, z);

axis tight;

Page 23: MATLAB  三維立體繪圖

plot3 指令可畫出三度空間中的曲線 plot3 :

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

plot3(t.*sin(t), t.*cos(t), t);

Page 24: MATLAB  三維立體繪圖

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

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

Page 25: MATLAB  三維立體繪圖

4-1 基本立體繪圖指令 plot3 :

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

範例 4-11: plotxyz08.m[x, y] = meshgrid(-2:0.1:2);

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

plot3(x, y, z);

Page 26: MATLAB  三維立體繪圖

4-1 基本立體繪圖指令 範例 4-11: plotxyz08.m

Page 27: MATLAB  三維立體繪圖

4-1 基本立體繪圖指令 plot3 :

上例中,所有的資料點都必需是在格子點上, MATLAB 才能根據每點的高度來作圖。如果所給的資料點不在格子點上,我們必需先用 griddata 指令來進行內插法以產生格子點

Page 28: MATLAB  三維立體繪圖

4-1 基本立體繪圖指令 範例 4-12: plotxyz09.m

x = 6*rand(100,1)-3; % x 為介於 [-3, 3] 的 100 點亂數

y = 6*rand(100,1)-3; % y 為介於 [-3, 3] 的 100 點亂數

z = peaks(x, y); % z 為 peaks 指令產生的 100 點輸出

[X, Y] = meshgrid(-3:0.1:3);

Z = griddata(x, y, z, X, Y, 'cubic'); mesh(X, Y, Z);

hold on

plot3(x, y, z, '.', 'MarkerSize', 16); % 晝出 100 個取樣

hold off

axis tight

Page 29: MATLAB  三維立體繪圖

4-1 基本立體繪圖指令 範例 4-12: plotxyz09.m

Page 30: MATLAB  三維立體繪圖

4-1 基本立體繪圖指令 整理:基本三維立體繪圖指令的列表

類別 指令 說明

網狀圖

mesh, ezmesh 立體網狀圖

meshc, ezmeshc 網狀圖加上等高線

meshz網狀圖加上“圍裙”(或“舞臺”)

曲面圖

surf, ezsurf 立體曲面圖

surfc, ezsurfc 曲面圖加上等高線

surfl 曲面圖加上光源

Page 31: MATLAB  三維立體繪圖

4-1 基本立體繪圖指令 整理:基本三維立體繪圖指令的列表

類別 指令 說明

曲線圖 plot3, ezplot3 立體曲線圖

低階函數surface Surf 用到的低階指令

line3 Plot3 用到的低階指令

等高線

contour, ezcontour

平面上的等高線

contour3 空間中的等高線

影像表示 pcolor在二維平面中以顏色表示曲面的高度

Page 32: MATLAB  三維立體繪圖

我就是聽不懂ㄝ怎麼辦 ?

ezmesh, ezsurf : 如果我們只是要很快地檢視一個具有二個輸入的函數的圖形,就可以使用 ezmesh 或是 ezsurf 等來快速地畫出函數的曲面圖形

Page 33: MATLAB  三維立體繪圖

>> x=linspace(-pi,pi);

>> y=linspace(0,2*pi);

>> ezmesh('sin(x)/x*sin(y)/y')

Page 34: MATLAB  三維立體繪圖

subplot(2,2,1); ezmesh('sin(x)/x*sin(y)/y'); subplot(2,2,2); ezsurf('sin(x*y)/(x*y)'); subplot(2,2,3); ezmeshc('sin(x)/x*sin(y)/y'); subplot(2,2,4); ezsurfc('sin(x*y)/(x*y)');

Page 35: MATLAB  三維立體繪圖

4-3 曲面顏色的控制 colorbar :

利用 colorbar 指令,可顯示 MATLAB 如何以不同顏色來代表曲面的高度

例如輸入「 colorbar 」

Page 36: MATLAB  三維立體繪圖

colorbar >> x=linspace(-pi,pi); >> y=linspace(0,2*pi); >> ezmesh('sin(x)/x*sin(y)/y'); >>colorbar

Page 37: MATLAB  三維立體繪圖

曲面顏色的控制 整理:MATLAB 現成的顏色對照表:

指令 說明

c o lo rm a p h sv H S V 的顏色對應表(預設值)

c o lo rm a p h o t “ ”代表 熱 的顏色對應表

c o lo rm a p co o l “ ”代表 冷 的顏色對應表

c o lo rm a p su m m e r “ ”代表 夏天 的顏色對應表

c o lo rm a p g ra y “ ”代表 灰階 的顏色對應表

c o lo rm a p co p p e r “ ”代表 銅色 的顏色對應表

c o lo rm a p au tu m n “ ”代表 秋天 的顏色對應表

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

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

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

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

colormap flag “ ”代表 旗幟 的顏色對應表

Page 38: MATLAB  三維立體繪圖

曲面使用感覺較冷的顏色

peaks;

colormap cool;

colorbar

Page 39: MATLAB  三維立體繪圖

[X, Y, Z] = peaks;

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

axis tight;

colormap hot

曲面使用感覺較暖的顏色