Upload
mabli
View
104
Download
0
Embed Size (px)
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
Citation preview
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]
+ - * / ^ 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.
設 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
基本立體繪圖指令 mesh 和 surf :
mesh :可畫出立體的「網狀圖」( Mesh Plots )
surf :可畫出立體的「曲面圖」( Surface Plots )
z = [0 2 1; 3 2 4; 4 4 4; 7 6 8];
z = [0 2 1; 3 2 4; 4 4 4; 7 6 8];mesh(z);xlabel('X 軸 = columnn index');ylabel('Y 軸 = row index');
meshgrid
meshgrid 的作用是產生 x 及 y (均為向量) 為基準的格子點 ( Grid Points ),其輸出為 xx 及 yy (均為矩陣),分別代表格子點的 x 座標及 y 座標。
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
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
注意 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
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)); % 以黑色呈現
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
使用 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
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); % 畫出立體網狀圖
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 指令的用法類似
4-1 基本立體繪圖指令 peaks :
為了方便測試立體繪圖,MATLAB 提供了一個peaks 函數,可產生一個凹凸有致的曲面,包含了三個局部極大點( Local Maxima)及三個局部極小點( Local Minima)
其方程式為:
222222 )1(53)1(2
3
1)
5(10)1(3 yxyxyx eeyxx
exz
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)
4-1 基本立體繪圖指令 peaks 的圖形
meshz 指令有將曲面加上「圍裙」或「舞台」
[x, y, z] = peaks;
meshz(x,y,z);
axis tight;
waterfall 指令可在 x 方向或 y 方向產生水流效果
[x, y, z] = peaks;
waterfall(x,y,z);
axis tight;
meshc 可同時畫出網狀圖與「等高線」( Contours )
[x, y, z] = peaks;
meshc(x, y, z);
axis tight;
plot3 指令可畫出三度空間中的曲線 plot3 :
t = linspace(0,20*pi, 501);
plot3(t.*sin(t), t.*cos(t), t);
t = linspace(0, 10*pi, 501);
plot3(t.*sin(t), t.*cos(t), t, t.*sin(t), t.*cos(t), -t); % 同時畫兩條曲線
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);
4-1 基本立體繪圖指令 範例 4-11: plotxyz08.m
4-1 基本立體繪圖指令 plot3 :
上例中,所有的資料點都必需是在格子點上, MATLAB 才能根據每點的高度來作圖。如果所給的資料點不在格子點上,我們必需先用 griddata 指令來進行內插法以產生格子點
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
4-1 基本立體繪圖指令 範例 4-12: plotxyz09.m
4-1 基本立體繪圖指令 整理:基本三維立體繪圖指令的列表
類別 指令 說明
網狀圖
mesh, ezmesh 立體網狀圖
meshc, ezmeshc 網狀圖加上等高線
meshz網狀圖加上“圍裙”(或“舞臺”)
曲面圖
surf, ezsurf 立體曲面圖
surfc, ezsurfc 曲面圖加上等高線
surfl 曲面圖加上光源
4-1 基本立體繪圖指令 整理:基本三維立體繪圖指令的列表
類別 指令 說明
曲線圖 plot3, ezplot3 立體曲線圖
低階函數surface Surf 用到的低階指令
line3 Plot3 用到的低階指令
等高線
contour, ezcontour
平面上的等高線
contour3 空間中的等高線
影像表示 pcolor在二維平面中以顏色表示曲面的高度
我就是聽不懂ㄝ怎麼辦 ?
ezmesh, ezsurf : 如果我們只是要很快地檢視一個具有二個輸入的函數的圖形,就可以使用 ezmesh 或是 ezsurf 等來快速地畫出函數的曲面圖形
>> x=linspace(-pi,pi);
>> y=linspace(0,2*pi);
>> ezmesh('sin(x)/x*sin(y)/y')
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)');
4-3 曲面顏色的控制 colorbar :
利用 colorbar 指令,可顯示 MATLAB 如何以不同顏色來代表曲面的高度
例如輸入「 colorbar 」
colorbar >> x=linspace(-pi,pi); >> y=linspace(0,2*pi); >> ezmesh('sin(x)/x*sin(y)/y'); >>colorbar
曲面顏色的控制 整理: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 “ ”代表 旗幟 的顏色對應表
曲面使用感覺較冷的顏色
peaks;
colormap cool;
colorbar
[X, Y, Z] = peaks;
surf(X, Y, Z, gradient(Z));
axis tight;
colormap hot
曲面使用感覺較暖的顏色