matlab 程式設計入門篇 三維立體繪圖
DESCRIPTION
MATLAB 程式設計入門篇 三維立體繪圖. 張智星 (Roger Jang) [email protected] http://mirlab.org/jang 台大資工系 多媒體檢索實驗室. 4-1 基本立體繪圖指令. mesh 和 surf : mesh :可畫出立體的「網狀圖」( Mesh Plots ) surf :可畫出立體的「曲面圖」( Surface Plots ) 範例 4-1: plotxyz001.m. z = [0 2 1; 3 2 4; 4 4 4; 7 6 8]; mesh(z); - PowerPoint PPT PresentationTRANSCRIPT
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 mesh 和 surf :
mesh :可畫出立體的「網狀圖」( Mesh Plots )
surf :可畫出立體的「曲面圖」( Surface Plots )
範例 4-1: plotxyz001.mz = [0 2 1; 3 2 4; 4 4 4; 7 6 8];
mesh(z);
xlabel('X 軸 = column index'); % X 軸的說明文字
ylabel('Y 軸 = row index'); % Y 軸的說明文字
MATLAB 程式設計入門篇:三維立體繪圖 Matrix Indexing
Coordinate Conversion from matrix indexing to x-y
coordinates jx iy
0 2 1
3 2 4
4 4 4
7 6 8
1
2
3
4
1 2 3
i (= y
)
j (= x)
(i, j) = (3, 2)
(x, y) = (2, 3)
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 範例 4-1 : plotxyz001.m
11.5
22.5
3
1
2
3
40
2
4
6
8
X = column index軸Y = row index軸
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 範例 4-2 : plotxyz002.m 若要將與曲面對應的 x 座標和 y 座標都一併畫出來,還是可以使用 mesh 指令
z = [0 2 1; 3 2 4; 4 4 4; 7 6 8];
mesh(z);
xlabel('X 軸 = column index'); % X 軸的說明文字
ylabel('Y 軸 = row index'); % Y 軸的說明文字
for i=1:size(z,1)
for j=1:size(z,2)
h=text(j, i, z(i,j), num2str(z(i, j))); % 標示曲面高度
set(h, 'hori', 'center', 'vertical', 'bottom', 'color', 'r'); % 改變位置及顏色
end
end
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 範例 4-2 : plotxyz002.m
11.5
22.5
3
1
2
3
40
2
4
6
8
1
4
2
4
X = column index軸
2
8
0
4
3
6
Y = row index軸
4
7
MATLAB 程式設計入門篇:三維立體繪圖
控制 Y 軸的方向 axis xy: 由小變大 axis ij: 由大變小
11.5
22.5
3
1
2
3
40
2
4
6
8
1
4
2
4
X = column index軸
2
8
0
4
3
6
Y = row index軸
4
7
11.5
22.5
3
1
2
3
4
0
2
4
6
8
1
8
46
4
X = column index軸
47
24
2
Y = row index軸
3
0
Hint: Use the command after plotting the surface/mesh.
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 範例 4-3 : plotxyz011.m meshgrid 的作用是產生 x 及 y (均為向量) 為基準的格子點 ( Grid Points ),其輸出為 xx 及 yy (均為矩陣),分別代表格子點的 x 座標及 y 座標。
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 若要產生一個曲面 z=x*y ,其中
x=3:6, y=5:9
y
x
3 4 5 6
3 4 5 6
3 4 5 6
3 4 5 6
3 4 5 6
1
2
3
4
51 2 3 4
5 5 5 5
6 6 6 6
7 7 7 7
8 8 8 8
9 9 9 9
1
2
3
4
5
1 2 3 4
15 20 25 30
18 24 30 36
21 28 35 42
24 32 40 48
27 36 45 54
1
2
3
4
5
1 2 3 4
zz xx yy= .*
= .*
Generated by meshgrid!
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
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 範例 4-3 : plotxyz011.m
12
34
24
3
4
5
6
xx
12
34
24
6
8
yy
34
56
68
20
40
zz xx yy 對 及 作圖
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 如果你不習慣使用 meshgrid ,也可以使用傳統的 for-loop 來一一填入曲面的值,但要小心座標和矩陣索引的對應關係。範例( plotxyz011.m )如下:
x = 3:6;
y = 5:9;
zz=zeros(length(y), length(x));
for i=1:length(y)
for j=1:length(x)
zz(i,j)=y(i)*x(j);
end
end
mesh(x, y, zz);
xlabel('X'); ylabel('Y'); zlabel('Z'); axis tight
3
4
5
6
5
6
7
8
9
20
30
40
50
XY
Z
MATLAB 程式設計入門篇:三維立體繪圖
範例 4-4 : plotxyz01.m使用 linspace 來產生較密集的資料,以便畫出由函數 形成的立體網狀圖
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); % 畫出立體網狀圖
4-1 基本立體繪圖指令
22 yxxez
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 範例 4-4 : plotxyz01.m
-2-1
01
2
-2
-1
0
1
2-0.5
0
0.5
MATLAB 程式設計入門篇:三維立體繪圖
範例 4-5 : plotxyz02.msurf 和 mesh 指令的用法類似
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); % 畫出立體曲面圖
4-1 基本立體繪圖指令
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 範例 4-5 : plotxyz02.m
-2-1
01
2
-2
-1
0
1
2-0.5
0
0.5
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 peaks :
為了方便測試立體繪圖,MATLAB 提供了一個peaks 函數,可產生一個凹凸有致的曲面,包含了三個局部極大點( Local Maxima)及三個局部極小點( Local Minima)
其方程式為:
222222 15312
3
1
51013 yxyxyx eeyx
xexz
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)
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 peaks 的圖形
-3-2
-10
12
3
-2
0
2
-5
0
5
x
Peaks
y
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 meshz :
meshz 指令有將曲面加上「圍裙」或「舞台」的效果
範例 4-6: plotxyz03.m[x, y, z] = peaks;
meshz(x,y,z);
axis tight;
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 範例 4-6: plotxyz03.m
-3-2
-10
12
3
-2
0
2
-5
0
5
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 waterfall :
waterfall 指令可在 x 方向或 y 方向產生水流效果
範例 4-7: plotxyz04.m[x, y, z] = peaks;
waterfall(x,y,z);
axis tight;
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 範例 4-7: plotxyz04.m
-3-2
-10
12
3
-2
0
2
-5
0
5
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 meshc :
meshc 可同時畫出網狀圖與「等高線」( Contours )
範例 4-8: plotxyz05.m[x, y, z] = peaks;
meshc(x, y, z);
axis tight;
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 範例 4-8: plotxyz05.m
-3-2
-10
12
3
-2
0
2
-10
-5
0
5
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 plot3 :
plot3 指令可畫出三度空間中的曲線 範例 4-9: plotxyz06.m
t = linspace(0,20*pi, 501); % 在 0 及 20*pi 中間取 501 點
plot3(t.*sin(t), t.*cos(t), t); % 畫出 tsin(t),tcos(t),t 的曲線
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 範例 4-9: plotxyz06.m
-100-50
050
100
-100
-50
0
50
1000
20
40
60
80
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 plot3 :
亦可同時畫出兩條三度空間中的曲線 範例 4-10: plotxyz07.m
t = linspace(0, 10*pi, 501);
plot3(t.*sin(t), t.*cos(t), t, t.*sin(t), t.*cos(t), -t); % 同時畫兩條曲線
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 範例 4-10: plotxyz07.m
-40-20
020
40
-40
-20
0
20
40-40
-20
0
20
40
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);
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 範例 4-11: plotxyz08.m
-2-1
01
2
-2
-1
0
1
2-0.5
0
0.5
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 plot3 :
上例中,所有的資料點都必需是在格子點上, MATLAB 才能根據每點的高度來作圖。如果所給的資料點不在格子點上,我們必需先用 griddata 指令來進行內插法以產生格子點
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
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 範例 4-12: plotxyz09.m
-3-2
-10
12
3
-2
0
2
-2
0
2
4
6
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 整理:基本三維立體繪圖指令的列表
類別 指令 說明
網狀圖
mesh, ezmesh 立體網狀圖
meshc, ezmeshc 網狀圖加上等高線
meshz網狀圖加上“圍裙”(或“舞臺”)
曲面圖
surf, ezsurf 立體曲面圖
surfc, ezsurfc 曲面圖加上等高線
surfl 曲面圖加上光源
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 整理:基本三維立體繪圖指令的列表
類別 指令 說明
曲線圖 plot3, ezplot3 立體曲線圖
低階函數surface Surf 用到的低階指令
line3 Plot3 用到的低階指令
等高線
contour, ezcontour
平面上的等高線
contour3 空間中的等高線
影像表示 pcolor在二維平面中以顏色表示曲面的高度
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 ezmesh, ezsurf :
如果我們只是要很快地檢視一個具有二個輸入的函數的圖形,就可以使用 ezmesh 或是 ezsurf 等來快速地畫出函數的曲面圖形
範例 4-13: plotxyz091.msubplot(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)');
MATLAB 程式設計入門篇:三維立體繪圖
4-1 基本立體繪圖指令 基礎
span=4*pi*[-1, 1]; ezplot('sin(x)/x', span);
-10 -5 0 5 10
-0.2
0
0.2
0.4
0.6
0.8
1
x
sin(x)/x
1sin
lim0
x
xx
Quiz!
Quiz!
Proof:1.Taylor expansion2.l’Hospital’s rule3.圖解說明法
MATLAB 程式設計入門篇:三維立體繪圖
Result of ez-family
-6 -4 -2 0 2 4 6
-5
0
5
-1
-0.5
0
0.5
1
x
sin(x)/x sin(y)/y
y-6 -4 -2 0 2 4 6
-5
0
5
-1
-0.5
0
0.5
1
x
sin(x y)/(x y)
y
-6 -4 -2 0 2 4 6
-5
0
5
-1
-0.5
0
0.5
1
x
sin(x)/x sin(y)/y
y-6 -4 -2 0 2 4 6
-5
0
5
-1
-0.5
0
0.5
1
x
sin(x y)/(x y)
y
MATLAB 程式設計入門篇:三維立體繪圖
4-2 立體圖形與圖軸的基本技巧 hidden off :
在繪製網狀圖時, MATLAB 會隱藏被遮蓋的網線,若要使被遮蓋的網線亦能呈現出來,可用 hidden off 指令
若再鍵入 hidden on ,則恢復原先的設定 範例 4-14: plotxyz10.m
[x,y,z] = peaks;
mesh(x,y,z);
hidden off
axis tight
MATLAB 程式設計入門篇:三維立體繪圖
4-2 立體圖形與圖軸的基本技巧 範例 4-14: plotxyz10.m
-3-2
-10
12
3
-2
0
2
-5
0
5
MATLAB 程式設計入門篇:三維立體繪圖
4-2 立體圖形與圖軸的基本技巧 整理:以 on/off 來切換的指令:
指令 說明
hidden on/off
隱藏( on )或顯示( off )被遮蓋的網線。
zoom on/off允許( on )或取消( off )以滑鼠點選來放大圖形。
rotate3d on/off
允許( on )或取消( off )以滑鼠點選來旋轉三維圖軸。
axis on/off 顯示( on )或不顯示( off )圖軸。
box on/off顯示( on )或不顯示( off )圖軸的外框。
hold on/off在繪製新圖時,保留( on )或消去( off )舊圖。
more on/off允許( on )或不允許( off )指令視窗的輸出暫停。
echo on/off允許( on )或不允許( off )指令在檔案內執行時,逐一顯示在視窗。
MATLAB 程式設計入門篇:三維立體繪圖
4-2 立體圖形與圖軸的基本技巧 rotate3d on :
若要能夠旋轉立體圖形,可已在產生 3D 圖形之後(例如輸入 peaks 之後),再輸入「 rotate3d on 」,此時您可以壓下滑鼠左鍵來拖曳圖軸,以選取最理想的觀測角度。
也可以點選圖形視窗上面的 圖示,就可以開始旋轉立體圖形。
MATLAB 程式設計入門篇:三維立體繪圖
4-2 立體圖形與圖軸的基本技巧 三維曲線的觀測角度:
一般而言,三維曲線的觀測角度是由 Azimuth (方位角)及 Elevation (仰角)來決定
Elevation
Azimuth
觀測點
原點
x
z y
MATLAB 程式設計入門篇:三維立體繪圖
4-2 立體圖形與圖軸的基本技巧 對二維圖形而言,預設值為 Azimuth = 0°,
Elevation = 90° ;對三維圖形而言,預設值為 Azimuth = -37.5°, Elevation = 30° 。若要改變觀測角度,可用 view 指令
範例 4-15: plotxyz11.mpeaks;
view([0,-30]);
MATLAB 程式設計入門篇:三維立體繪圖
4-2 立體圖形與圖軸的基本技巧 範例 4-15: plotxyz11.m
-3 -2 -1 0 1 2 3
-2
0
2-6
-4
-2
0
2
4
6
8
y
x
Peaks
MATLAB 程式設計入門篇:三維立體繪圖
4-2 立體圖形與圖軸的基本技巧 NaN :
有時候我們希望將曲面圖切掉一部份,以呈現不同的效果,此時可用 NaN 或 nan( Not a Number ,即“非數值”)來取代矩陣某一部份的值, MATLAB 一碰到 NaN ,就會“鏤空”
範例 4-16: plotxyz12.m[X, Y, Z] = peaks;
Z(10:20,10:20) = nan; % 將 Z 矩陣的一部分代換為 nan
surf(X, Y, Z);
axis tight
Quiz!
MATLAB 程式設計入門篇:三維立體繪圖
4-2 立體圖形與圖軸的基本技巧 範例 4-16: plotxyz12.m
-3-2
-10
12
3
-2
0
2
-5
0
5
MATLAB 程式設計入門篇:三維立體繪圖
4-3 曲面顏色的控制 colorbar :
利用 colorbar 指令,可顯示 MATLAB 如何以不同顏色來代表曲面的高度
例如先輸入「 peaks 」,再輸入「 colorbar 」
-2
0
2
-2
0
2
-5
0
5
x
Peaks
y
-6
-4
-2
0
2
4
6
8
MATLAB 程式設計入門篇:三維立體繪圖
4-3 曲面顏色的控制 整理:常用顏色的 RGB 成分:
顏色 Red (紅色) Green (綠色) Blue (藍色)
black (黑) 0 0 0
white (白) 1 1 1
red (紅) 1 0 0
green (綠) 0 1 0
blue (藍) 0 0 1
yellow (黃) 1 1 0
magenta (錳紫) 1 0 1
cyan (青藍) 0 1 1
gray (灰) 0.5 0.5 0.5
dark red (暗紅) 0.5 0 0
copper (銅色) 1 0.62 0.4
aquamarine (碧綠) 0.49 1 0.83
Quiz!
MATLAB 程式設計入門篇:三維立體繪圖
4-3 曲面顏色的控制 colormap :
MATLAB 預設的顏色對應表可由 colormap 得知
cm 是一個 64×3 的矩陣,因此 MATLAB 在畫圖時,會把 cm 第一列的顏色設定給曲面的最低點,把 cm 的最後一列的顏色設定給曲面的最高點,其餘高度的顏色則依線性內插法來決定。(注意:colorbar 的顯示和 cm剛好是上下顛倒!)
>> cm = colormap;
>> size(cm)
ans =
64 3
MATLAB 程式設計入門篇:三維立體繪圖
4-3 曲面顏色的控制 colormap :
改變顏色對應表,可得到不同顏色的曲面 ,欲改變顏色對應表,也是用 colormap 指令
範例 4-17: plotxyz13.m
peaks;
colormap(rand(64,3)); % 以亂數產生顏色對應表
colorbar;
MATLAB 程式設計入門篇:三維立體繪圖
4-3 曲面顏色的控制 範例 4-17: plotxyz13.m
-2
0
2
-2
0
2
-5
0
5
x
Peaks
y
-6
-4
-2
0
2
4
6
8
MATLAB 程式設計入門篇:三維立體繪圖
4-3 曲面顏色的控制 整理:MATLAB 現成的顏色對照表:
指令 說明
co lo rm ap h sv H S V 的顏色對應表(預設值)
co lo rm ap h o t “ ”代表 熱 的顏色對應表
co lo rm ap co o l “ ”代表 冷 的顏色對應表
co lo rm ap su m m er “ ”代表 夏天 的顏色對應表
co lo rm ap g ray “ ”代表 灰階 的顏色對應表
co lo rm ap co p p er “ ”代表 銅色 的顏色對應表
co lo rm ap au tu m n “ ”代表 秋天 的顏色對應表
co lo rm ap w in te r “ ”代表 冬天 的顏色對應表
co lo rm ap sp rin g 代表 “ ”春天 的顏色對應表
co lo rm ap b o n e “代表 X ”光片 的顏色對應表
co lo rm ap p in k “ ”代表 粉紅 的顏色對應表
co lo rm ap flag “ ”代表 旗幟 的顏色對應表
MATLAB 程式設計入門篇:三維立體繪圖
Change Color Map colormap cool
使您的曲面使用感覺較冷的顏色
範例 4-18:plotxyz14.m
Result
peaks;
colormap cool;
colorbar
-2
0
2
-2
0
2
-5
0
5
x
Peaks
y
-6
-4
-2
0
2
4
6
8
MATLAB 程式設計入門篇:三維立體繪圖
Change Color Map colormap hot
使您的曲面使用感覺較熱的顏色
Result
peaks;
colormap hot;
colorbar
-2
0
2
-2
0
2
-5
0
5
x
Peaks
y
-6
-4
-2
0
2
4
6
8
MATLAB 程式設計入門篇:三維立體繪圖
連續改變 colormap 顏色如何變化?為什麼?試看看!
peaks;
colormap hsv
colorbar
colormap(colormap.^2)
colormap(colormap.^2)
colormap(colormap.^2)
colormap(colormap.^2)
…
peaks;
colormap hsv
colorbar
colormap(colormap.^.5)
colormap(colormap.^.5)
colormap(colormap.^.5)
colormap(colormap.^.5)
…
MATLAB 程式設計入門篇:三維立體繪圖
4-3 曲面顏色的控制 surf和mesh 的顏色設定:
除了以高度來設定顏色之外, surf 及mesh 指令都可以接受第 4 個輸入引數來設定顏色
例如:以曲面的斜率來設定顏色 範例 4-19: plotxyz15.m[X, Y, Z] = peaks;
surf(X, Y, Z, gradient(Z));
axis tight;
colormap hot
Quiz: How to compute gradient?
-3-2
-10
12
3
-2
0
2
-5
0
5
MATLAB 程式設計入門篇:三維立體繪圖
4-3 曲面顏色的控制 surf和mesh 的顏色設定:
例如:以曲面的曲率來設定顏色 範例 4-20: plotxyz16.m
[X, Y, Z] = peaks;
surf(X, Y, Z, del2(Z));
axis tight;
colormap hot
-3-2
-10
12
3
-2
0
2
-5
0
5
MATLAB 程式設計入門篇:三維立體繪圖
4-3 曲面顏色的控制 brighten :
我們可用 brighten 指令來使顏色對照表變亮或變暗
範例 4-21: plotxyz17.mcolormap copper
subplot(3, 1, 1); rgbplot(colormap);
brighten(colormap, 0.5)
subplot(3, 1, 2); rgbplot(colormap);
brighten(colormap, -0.8)
subplot(3, 1, 3); rgbplot(colormap);
MATLAB 程式設計入門篇:三維立體繪圖
4-3 曲面顏色的控制 範例 4-21: plotxyz17.m
0 10 20 30 40 50 60 700
0.5
1
0 10 20 30 40 50 60 700
0.5
1
0 10 20 30 40 50 60 700
0.5
1
MATLAB 程式設計入門篇:三維立體繪圖
4-3 曲面顏色的控制 True Color :
前例 MATLAB 決定顏色的方法稱為「索引顏色」( Indexed Color )法,因為曲面上每個方塊先對應至顏色對應表的索引
如果您的顯示器能支援 24 位元全彩,則我們可以直接定義一千六百萬( 2^24 )種顏色,而不需要再定義顏色對應表。此種方法稱為「真實顏色」( True Color )法
Quiz:1.Definition of true and indexed color2.Their strength and weakness
MATLAB 程式設計入門篇:三維立體繪圖
4-3 曲面顏色的控制 範例 4-22: plotxyz18.m
Z = peaks(50);
C(:, :, 1) = rand(50); % C(:,:,1) 代表 R( Red ,紅色)的份量
C(:, :, 2) = rand(50); % C(:,:,2) 代表 G ( Green ,綠色)的份量
C(:, :, 3) = rand(50); % C(:,:,3) 代表 B( Blue ,藍色)的份量
surf(Z, C);
axis tight
5040
3020
101020
3040
-5
0
5
50
MATLAB 程式設計入門篇:三維立體繪圖
4-3 曲面顏色的控制 shading :
若要使表面的顏色產生連續性的變化,可使用 shading 指令
例如我們可以先輸入「 peaks 」,再輸入「 shading interp 」,就可以得到下列顏色漸進變化的圖形
MATLAB 程式設計入門篇:三維立體繪圖
4-3 曲面顏色的控制 整理:
指令 功能
shading interp
使用 Bilinear Interpolation 來使「瓷磚」根據四頂點的顏色產生連續的變化
shading flat
「瓷磚」的顏色是單一的。
shading faceted 「瓷磚」的顏色是單一的,而且同時
顯色「瓷磚」交接的「邊」。(此為預設值)
MATLAB 程式設計入門篇:三維立體繪圖
4-3 曲面顏色的控制 colormap和 shading :
使用 colormap 及 shading ,可產生意想不到的結果
範例 4-23: plotxyz19.m
surfl(peaks); % 曲面圖加上光源
axis tight
colormap(pink);
shading interp
MATLAB 程式設計入門篇:三維立體繪圖
4-3 曲面顏色的控制 範例 4-23: plotxyz19.m
是不是很像平滑無暇的絲緞呢?