MATLAB 程式設計入門 4-1 基本立體繪圖指令 mesh 和 surf 是三度空間立體繪圖的基本指令,mesh 可畫出立體的 網狀圖 (Mesh Plots),surf 則可畫出立體的 曲面圖 (Surface Plots), 兩者產生的圖形都會依高度而有不同顏色 下列範例畫出一個二維矩陣的立

Similar documents
0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00

二次曲線 人們對於曲線的使用及欣賞 比曲線被視為一種數學題材來探討要早 得多 各種曲線中 在日常生活常接觸的 當然比較容易引起人們的興趣 比如 投擲籃球的路徑是拋物線 盤子的形狀有圓形或橢圓形 雙曲線 是較不常見的 然而根據科學家的研究 彗星的運行軌道是雙曲線的一部 分 我們將拋物線 圓與橢圓 雙曲

Book1_ans.indd

Photoshop CS3 影像創造力 基礎講堂 8 學習流程 學習重要性 學習難度 必學指令工具 實作應用範例 創造舞台燈光的漸層繪圖 延伸學習 雜訊與半透明漸層 8-1 Photoshop Photoshop 8 136


Part I MATLAB 的矩陣與函數圖 在我們前面的章節中, 已經讓讀者瞭解了一些初步的統計概念, 現在要介紹給讀者 的是一個應用上十分廣泛的數學計算軟體 : MATLAB MATLAB 全名為 MATri LABoratory, 是基於其矩陣 (Matri) 運算的概念而命名 雖然名為數學計算

Microsoft PowerPoint - Slide02_MatrixPlot.ppt [相容模式]

FIT1改1.FIT)

CU0594.pdf

致理技術學院

6寸PDF生成工具

資料結構之C語言重點複習

Microsoft Word - ACI chapter00-1ed.docx

D 江 苏 汉 邦 建 设 集 团 有 限 公 司 江 苏 邦 实 建 设 工 程 有 限 公 司

1

Microsoft Word - 3D手册2.doc

08 握把式圖形與GUI設計

HP Deskjet Color Inkjet 噴墨印表機墨水對照表 皆以 5% 覆蓋率計算 印表機型號適用黑色墨水匣型號適用彩色墨水匣型號適用相片墨水匣型號 Deskjet 450ci/cbi/wbt No.56 (c6656aa) No.57 (c6657aa) Deskjet 460 No.9

第 六 条 办 法 第 五 条 ( 三 ) 协 会 考 评, 考 评 指 考 核 评 价 第 七 条 办 法 第 六 条 职 业 操 守 包 括 的 内 容 : 个 人 诚 信 不 做 假 账 不 偷 漏 税 不 贪 污 盗 窃 等 第 八 条 企 业 财 务 管 理 人 才 评 价 实 行 五 星

他 随 身 带 有 二 三 十 张 古 方, 白 天 卖 药, 夜 晚 将 药 材 精 细 研 末, 按 方 配 制 对 于 病 人 服 药 后 反 应, 特 别 留 心 发 现 问 题, 就 近 向 老 医 生 老 药 贩 虚 心 求 教, 千 方 百 提 高 药 效 同 时 对 于 春 夏 秋

6寸PDF生成工具

Microsoft Word - 三方协议书与接收函的相关说明学生版.doc

untitled

邻居啊 第二天 对门却悄无声息了 莫非昨夜的吵闹 仅是个幻觉 夜幕拉下时 寒风又吱溜溜地叫个不停 老婆 睡下后 我这只夜猫子 继续兴致勃勃地跟着福尔 摩斯去探案 白天的喧嚣退去了 周围格外安静 正 是读书的好时候 突然 响起了钟摆声 哒 哒 哒 节奏匀称 不疾不徐 声响却愈来愈大 格外突兀 了 原来

<4D F736F F D BAC520CAD7B6BCCAA6B7B6B4F3D1A C4EAD7A8D2B5BCBCCAF5D6B0CEF1C6C0C6B8B9A4D7F7D2E2BCFB2E646F63>

其 他 方 面 也 可 以 采 用 同 样 的 方 式, 这 样 又 可 以 锻 炼 除 语 文 方 面 的 其 他 能 力 了 而 英 语 方 面, 我 认 为 配 合 英 语 专 业 举 办 英 语 演 讲 比 赛 就 很 不 错 这 样 开 展 一 系 列 的 创 新 活 动, 锻 炼 多 方

Microsoft Word - 送報伕2.doc

申论写作套路万能模板

Hella LED 前燈 日行燈 Hella

untitled

1912 Titanic Richardson echo-ranging 1, mm min 6.8mm min mm min

coverage2.ppt

01

穨matlab教學範例ccc.doc


<4D F736F F D B0EABB79A4E5B8D5C344BBBCB065AAA9>


康體藝術

PowerPoint 簡報

理性真的普遍嗎 注意力的爭奪戰 科學發展 2012 年 12 月,480 期 13

A A A I have a dream A 故事緣由 100 μm a

避孕篇

山东建筑大学学分制管理规定(试行)

Microsoft PowerPoint - 遊戲企劃

Microsoft Word - ACL chapter02-5ed.docx


16 标 本 缓 急 的 护 理 原 则 不 包 括 ( 扶 正 祛 邪 法 ) 17 顺 从 疾 病 假 象 而 进 行 护 理 的 方 法 为 ( 反 护 法 ) 18 下 列 属 于 正 护 法 的 是 ( 虚 则 补 之 ) 19 因 中 气 不 足 脾 阳 不 运 而 致 的 腹 胀 便

???p???????????i?h?h?D???N_?s_

( ) 5. 自 行 車 有 吱 吱 喳 喳 的 聲 音 可 能 是 什 麼 原 因 所 造 成?(1) 鈴 號 的 聲 音 (2) 螺 栓 ( 帽 ) 鬆 動 (3) 腳 踏 板 磨 損 ( ) 6. 下 列 敘 述 何 者 是 對 的?(1) 輪 胎 的 胎 壓 是 愈 高 愈 好, 所 以 填

硕士论文正文

ZW.PDF

cm 50.5cm

yy.xls

穨finaldiss.doc

13. 下 列 植 物 的 向 性 或 運 動, 哪 些 是 受 到 生 長 素 作 用 的 影 響?(5-4) 甲. 睡 蓮 的 花 到 了 晚 上 會 合 起 來 ; 乙. 黃 瓜 的 捲 鬚 攀 附 竹 竿 向 上 生 長 ; 丙. 含 羞 草 的 葉 經 碰 觸 後 閉 合 ; 丁. 紅 豆


第十二章 角色转换 走向成功

國立和美實驗學校103學年度第1次教師甄選簡章

3. 透 過 團 體 小 組 分 別 設 計 出 一 套 自 行 車 伸 展 操 4. 教 師 介 紹 騎 乘 自 行 車 上 座 方 法 煞 車 及 踩 踏 等 要 領. 練 習 自 行 車 運 動 中 基 本 的 上 座 平 衡 直 行 轉 彎 煞 車 等 動 作 ( 二 ) 自 行 車 運 動

104 年 度 推 廣 校 園 正 確 用 藥 教 育 模 式 中 心 學 校 成 果 報 告 書 學 校 : 桃 園 市 中 心 學 校 田 心 國 民 小 學 壹 計 畫 目 的 一 凝 聚 本 市 中 心 學 校 與 重 點 種 子 學 校 正 確 用 藥 教 育 推 廣 共 識, 期 能 培

学做一体手册,餐饮.doc

人体解剖实习指导.doc

外科手术基础概述

Microsoft PowerPoint 曲線之切線、曲率及紐率.ppt

Microsoft Word - _m30.doc

卷 首 语

AutoCAD 用戶如何使用 ArchiCAD

目次 3 ONTNTS 1 相似形 上 國民中學數學第五冊習作 表示為仿會考或特招題 1-1 比例線段 3 1- 相似多邊形 相似三角形的應用 圓形 -1 點 線 圓 4 - 圓心角 圓周角與弦切角 外心 內心與重心 3-1 推理證明 三角形與多

輕鬆學 Dreamweaver CS5 網頁設計..\Example\Ch0\ \.html..\example\ch0\ \mouse.txt..\example\ch0\ \ _Ok.html 學習重點 JavaScript 複製程式碼 mouse.txt Ctrl+C Ctrl+C 0-4

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

程式與科學計算 Lecture 2

Chapter 3 Camera Raw Step negative clarity +25 ] P / Step 4 0 ( 下一頁 ) Camera Raw Chapter 3 089

Transcription:

三維立體繪圖 在科學目視表示法 (Scientific Visualization) 中, 隱藏在資料內的資訊是 要靠圖形的技巧來呈現, 其中三度空間的立體繪圖是一個非常基本且重要 的技巧 本章將介紹 MATLAB 在三度空間的各項立體繪圖指令

MATLAB 程式設計入門 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); xlabel('x 軸 = column index'); % X 軸的說明文字 ylabel('y 軸 = row index'); % Y 軸的說明文字 在上述範例中,X 軸對應到矩陣 z 的直行索引,Y 軸則對應到橫列索引, 換句話說, 在上述圖形中, 當 x = j 且 y = i 時, 所對應的高度是 z(i, j), 可以驗證如下 : 4-2

第 4 章 三維立體繪圖 範例 4-2:plotxyz002.m 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 若要將與曲面對應的 x 座標和 y 座標都一併畫出來, 還是可以使用 mesh 指令, 例如我們可以畫出曲面 z = xy 在 [3,6] 及 [5,9] 範圍內的網狀圖 : 範例 4-3:plotxyz011.m x = 3:6; y = 5:9; [xx, yy] = meshgrid(x, y); zz = xx.*yy; subplot(2,2,1); mesh(xx); % xx 和 yy 都是矩陣 % 計算函數值 zz, 也是矩陣 4-3

MATLAB 程式設計入門 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 在上述範例中,meshgrid 的作用是產生 x 及 y ( 均為向量 ) 為基準的格子點 (Grid Points), 其輸出為 xx 及 yy( 均為矩陣 ), 分別代表格子點的 x 座標 及 y 座標 在下列範例中, 我們使用 linspace 來產生較密集的資料, 以便畫出由函數 z = xe -x2 -y 2 形成的立體網狀圖 : 範例 4-4:plotxyz01.m x = linspace(-2, 2, 25); y = linspace(-2, 2, 25); [xx, yy] = meshgrid(x, y); zz = xx.*exp(-xx.^2-yy.^2); mesh(xx, yy, zz); % 在 x 軸 [-2,2] 之間取 25 點 % 在 y 軸 [-2,2] 之間取 25 點 % xx 和 yy 都是 25 25 的矩陣 % 計算函數值,zz 也是 25 25 的矩陣 % 畫出立體網狀圖 4-4

第 4 章 三維立體繪圖 surf 和 mesh 指令的用法類似 : 範例 4-5:plotxyz02.m 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); % 在 x 軸 [-2,2] 之間取 25 點 % 在 y 軸 [-2,2] 之間取 25 點 % xx 和 yy 都是 25 25 的矩陣 % zz 也是 25 2 的矩陣 % 畫出立體曲面圖 4-5

MATLAB 程式設計入門 為了方便測試立體繪圖,MATLAB 提供了一個 peaks 函數, 可產生一個凹 凸有致的曲面, 包含了三個局部極大點 (Local Maxima) 及三個局部極小點 (Local Minima), 其方程式為 : 要畫出此函數的最快方法, 即是在 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) 我們亦可對 peaks 指令取點, 再以各種不同方法進行繪圖, 相關細節可由 help peaks 而查到線上支援 4-6

第 4 章 三維立體繪圖 meshz 指令有將曲面加上 圍裙 或 舞台 的效果 : 範例 4-6:plotxyz03.m [x, y, z] = peaks; meshz(x,y,z); axis tight; 提示 : ~ 在上例中, axis tight" 會將圖軸在 x y z 方向的範圍定為圖形資料在 x y z 方向的極大值及極小值, 因此會使圖形 塞滿 " 整個圖軸 使用 axis([-inf, inf, -inf, inf, -inf, inf]) 可以達到相同的效果 waterfall 指令可在 x 方向或 y 方向產生水流效果 : 範例 4-7:plotxyz04.m [x, y, z] = peaks; waterfall(x,y,z); axis tight; 4-7

MATLAB 程式設計入門 meshc 可同時畫出網狀圖與 等高線 (Contours): 範例 4-8:plotxyz05.m [x, y, z] = peaks; meshc(x, y, z); axis tight; 4-8

第 4 章 三維立體繪圖 surfc 可同時畫出曲面圖與等高線, 而 contour contourf contour3 等指令則 可畫出不同呈現方式的等高線, 可詳見第五章 特殊圖形 的說明 plot3 指令可畫出三度空間中的曲線 : 範例 4-9:plotxyz06.m t = linspace(0,20*pi, 501); plot3(t.*sin(t), t.*cos(t), t); % 在 0 及 20*pi 中間取 501 點 % 畫出 tsin(t),tcos(t),t 的曲線 下一個範例可同時畫出兩條三度空間中的曲線 : 範例 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); % 同時畫兩條曲線 4-9

MATLAB 程式設計入門 如果輸入引數是三個大小相同的矩陣 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-10

第 4 章 三維立體繪圖 在上例中, 所有的資料點都必需是在格子點上,MATLAB 才能根據每點的高 度來作圖 如果所給的資料點不在格子點上, 我們必需先用 griddata 指令來 進行內插法以產生格子點, 例如 : 範例 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'); % 用 cubic 內差法進行內差 mesh(x, Y, Z); hold on plot3(x, y, z, '.', 'MarkerSize', 16); % 晝出 100 個取樣 hold off axis tight 其中 x y z 代表資料點 ( 或取樣點 ), 而 X Y Z 則代表根據資料點進行 內插法所得到的格子點, 以畫出上面的網狀圖 有關於曲線及曲面的內插, 可參見本書姊妹作 MATLAB 程式設計 : 進階篇 第九章 內差法 4-11

MATLAB 程式設計入門 以下是基本三維立體繪圖指令的列表 : 整理 : 基本三維立體繪圖指令 類別指令說明 網狀圖 曲面圖 mesh, ezmesh meshc, ezmeshc meshz surf, ezsurf surfc, ezsurfc surfl 立體網狀圖網狀圖加上等高線網狀圖加上 圍裙 "( 或 舞臺 ") 立體曲面圖曲面圖加上等高線曲面圖加上光源 曲線圖 plot3, ezplot3 立體曲線圖 低階函數 等高線 surface line3 contour, ezcontour contour3 Surf 用到的低階指令 Plot3 用到的低階指令平面上的等高線空間中的等高線 影像表示 pcolor 在二維平面中以顏色表示曲面的高度 如果我們只是要很快地檢視一個具有二個輸入的函數的圖形, 就可以使用 ezmesh 或是 ezsurf 等來快速地畫出函數的曲面圖形, 例如 : 範例 4-13:plotxyz091.m 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-12

第 4 章 三維立體繪圖 很難想像這些簡單的函數可以產生如此複雜的曲面吧? 4-2 立體圖形與圖軸的基本技巧 在繪製網狀圖時,MATLAB 會隱藏被遮蓋的網線, 若要使被遮蓋的網線亦能 呈現出來, 可用 hidden off 指令, 如下 : 範例 4-14:plotxyz10.m [x,y,z] = peaks; mesh(x,y,z); hidden off axis tight 4-13

MATLAB 程式設計入門 若再鍵入 hidden on, 則恢復原先的設定 此種以 on 或 off 來進行兩段式切換 的指令可列表如下 整理 : 以 on/off 來切換的指令 指令 hidden on/off zoom on/off rotate3d on/off axis on/off box on/off hold on/off more on/off echo on/off 說明隱藏 (on) 或顯示 (off) 被遮蓋的網線 允許 (on) 或取消 (off) 以滑鼠點選來放大圖形 允許 (on) 或取消 (off) 以滑鼠點選來旋轉三維圖軸 顯示 (on) 或不顯示 (off) 圖軸 顯示 (on) 或不顯示 (off) 圖軸的外框 在繪製新圖時, 保留 (on) 或消去 (off) 舊圖 允許 (on) 或不允許 (off) 指令視窗的輸出暫停 允許 (on) 或不允許 (off) 指令在檔案內執行時, 逐一顯示在視窗 例如, 若要能夠旋轉立體圖形, 可以在產生 3D 圖形之後 ( 例如輸入 peaks 之後 ), 再輸入 rotate3d on, 此時您可以壓下滑鼠左鍵來拖曳圖軸, 以選取最理想的觀測角度 ( 你也可以點選圖形視窗上面的圖示, 就可以開始旋轉立體圖形 ) 4-14

第 4 章 三維立體繪圖 一般而言, 三維曲線的觀測角度是由 Azimuth 及 Elevation 來決定, 其示意圖 如下 : 對二維圖形而言, 預設值為 Azimuth = 0,Elevation = 90 ; 對三維圖形而 言, 預設值為 Azimuth = -37.5,Elevation = 30 若要改變觀測角度, 可用 view 指令, 如下 : 範例 4-15:plotxyz11.m peaks; view([0,-30]); 4-15

MATLAB 程式設計入門 上述 view 指令將 Azimuth 改為 0,Elevation 改為 -30, 因此得到一個 由 下向上望 " 的效果 提示 : ~ 當你下達 rotate3d on 之後, 在旋轉圖形時, 螢幕上也會同步顯示 Azimuth 和 Elevation 的值 因此你可以旋轉在最適合的觀察角度時, 記錄下相關的 Azimuth 和 Elevation, 並使用 view 指令來直接顯示圖形的最佳觀察方位 有時候我們希望將曲面圖切掉一部份, 以呈現不同的效果, 此時可用 NaN 或 nan(not a Number, 即 非數值 ") 來取代矩陣某一部份的值,MATLAB 一 碰到 NaN, 就會 鏤空 ", 如下 : 範例 4-16:plotxyz12.m [X, Y, Z] = peaks; Z(10:20,10:20) = nan; surf(x, Y, Z); axis tight % 將 Z 矩陣的一部分代換為 nan 4-16

第 4 章 三維立體繪圖 4-3 曲面顏色的控制 利用 colorbar 指令, 可顯示 MATLAB 如何以不同顏色來代表曲面的高度, 例 如若先輸入 peaks, 再輸入 colorbar, 就可以得到下列圖形 : 如上圖所示,colorbar 可以顯示高度與顏色的對照長條圖, 而曲面上每一個小方塊的顏色即根據此對照圖而得出 事實上, 顏色與高度的對應關係是由一個 顏色對應表 (Colormap, 或簡稱 色表 或 色盤 ) 來控制, 此表是一個 m 3 的矩陣,m 的值通常是 64, 代表真正用到的顏色個數, 而每一列代表一個顏色的 RGB 值, 一些常用的值可列表如下 : 整理 : 常用顏色的 RGB 成分 顏色 Red( 紅色 ) Green( 綠色 ) Blue( 藍色 ) black( 黑 ) 0 0 0 white( 白 ) 1 1 1 red( 紅 ) 1 0 0 green( 綠 ) 0 1 0 4-17

MATLAB 程式設計入門 顏色 Red( 紅色 ) Green( 綠色 ) Blue( 藍色 ) 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 MATLAB 預設的顏色對應表可由 colormap 得知, 如下 : >> cm = colormap; >> size(cm) ans = 64 3 由上可知 cm 是一個 64 3 的矩陣, 因此 MATLAB 在畫圖時, 會把 cm 第一列的顏色設定給曲面的最高點, 把 cm 的最後一列的顏色設定給曲面的最低點, 其餘高度的顏色則依線性內插法來決定 因此, 我們只要改變顏色對應表, 即可得到不同顏色的曲面 欲改變顏色對應表, 也是用 colormap 指令, 如下 : 範例 4-17:plotxyz13.m peaks; colormap(rand(64,3)); colorbar; % 以亂數產生顏色對應表 4-18

第 4 章 三維立體繪圖 在上述範例中, 我們使用亂數來產生一個 64 3 顏色對應表, 因此曲面看起來 並不是很賞心悅目 事實上, 要產生一個好看的顏色對應表並不是件容易的 事, 因此 MATLAB 有一些現成的顏色對應表, 整理如下 : 整理 :MATLAB 現成的顏色對照表 指令 說明 colormap hsv HSV 的顏色對應表 ( 預設值 ) colormap hot colormap cool colormap summer colormap gray colormap copper colormap autumn colormap winter colormap spring colormap bone colormap pink colormap flag 代表 熱 " 的顏色對應表代表 冷 " 的顏色對應表代表 夏天 " 的顏色對應表代表 灰階 " 的顏色對應表代表 銅色 " 的顏色對應表代表 秋天 " 的顏色對應表代表 冬天 " 的顏色對應表代表 春天 " 的顏色對應表代表 X 光片 " 的顏色對應表代表 粉紅 " 的顏色對應表代表 旗幟 " 的顏色對應表 4-19

MATLAB 程式設計入門 例如, 要使您的曲面使用感覺較冷的顏色, 可輸入如下 : 範例 4-18:plotxyz14.m peaks; colormap cool; colorbar 除了以高度來設定顏色之外,surf 及 mesh 指令都可以接受第 4 個輸入 引數來作為設定顏色的依據 例如, 若要以曲面的斜率 ( 即 梯度 或 Gradient ) 來設定顏色, 可進行如下 : 範例 4-19:plotxyz15.m [X, Y, Z] = peaks; surf(x, Y, Z, gradient(z)); axis tight; colormap hot 4-20

第 4 章 三維立體繪圖 在上例中,gradient (Z) 會根據數值微分 (Numerical Differentiation) 來產生矩陣 Z 的梯度,surf 即利用此梯度來產生曲面的顏色 欲知 gradient 的詳細資訊, 可在 MATLAB 指令視窗下輸入 help gradient 若要以曲面的曲率來設定顏色, 可進行如下 : 範例 4-20:plotxyz16.m [X, Y, Z] = peaks; surf(x, Y, Z, del2(z)); axis tight; colormap hot 4-21

MATLAB 程式設計入門 在上例中,del2 (Z) 根據數值微分來產生矩陣 Z 的 discrete Laplacian, 詳情可 參見 help del2 傳回的線上支援 我們可用 brighten 指令來使顏色對照表變亮或變暗, 如下 : 範例 4-21:plotxyz17.m colormap 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); 其中 rgbplot 可畫出 R G B 三色的比重對列數的變化 上述 MATLAB 決定顏色的方法稱為 索引顏色 (Indexed Color) 法, 因為曲面上每個方塊先對應至顏色對應表的索引 ( 即某一特定列 ), 再由此列決定真正要用的顏色 如果您的顯示器能支援 24 位元全彩, 則我們可以直接定義一千六百萬 (2 24 ) 種顏色, 而不需要再定義顏色對應表 此種方法稱為 真實顏色 (True Color) 法, 如下 : 4-22

第 4 章 三維立體繪圖 範例 4-22:plotxyz18.m Z = peaks(50); C(:, :, 1) = rand(50); C(:, :, 2) = rand(50); C(:, :, 3) = rand(50); subplot(1,1,1); surf(z, C); axis tight % C(:,:,1) 代表 R(Red, 紅色 ) 的份量 % C(:,:,2) 代表 G(Green, 綠色 ) 的份量 % C(:,:,3) 代表 B(Black, 黑色 ) 的份量 在上圖中, 曲面上每一個小方塊的顏色都是由矩陣 C 的 R G B 份量來決 定, 這就是 真實顏色, 而和前述的 索引顏色 有所不同 提示 : ~ 一般而言, 除了為了顯示自然的影像之外, 否則我們很少使用 True Color 4-23

MATLAB 程式設計入門 在前述的例子中, 每一個曲面都可以視為由一塊塊的四角小 瓷磚 所拼成, 而且每一塊 瓷磚 表面的顏色是均勻一致的, 其顏色值由 瓷磚 所在的曲面高度所決定 若要使 瓷磚 表面的顏色產生連續性的變化, 可使用 shading 指令, 例如我們可以先輸入 peaks, 再輸入 shading interp, 就可以得到下列顏色漸進變化的圖形 : 由上圖可看出, 經由 shading interp 的作用, 曲面的顏色更加柔順平滑 有關 shading 指令的用法, 可列表如下 : 整理 : 指令 shading interp shading flat shading faceted 功能使用 Bilinear Interpolation 來使 瓷磚 根據四頂點的顏色產生連續的變化 瓷磚 的顏色是均勻一致的 瓷磚 的顏色是均勻一致的, 而且同時顯色 瓷磚 交接的 邊 ( 此為預設值 ) 4-24

第 4 章 三維立體繪圖 使用 colormap 及 shading, 可產生意想不到的結果, 例如 : 範例 4-23:plotxyz19.m surfl(peaks); axis tight colormap(pink); shading interp % 曲面圖加上光源 上圖的曲面, 是否很像一件光滑無瑕的雕塑品呢?! 4-25

1. 請用 surf 指令來畫出下列函數的曲面圖 : 其中 x 在 [-2, 2] 間共等切分為 21 點,y 在 [-1, 1] 間共等切分為 21 點, 所以此曲面共有 21*21=441 個點 (a) 請用預設的顏色對應表 (Colormap) 來畫出此曲面 (b) 請以曲面的斜率來設定曲面的顏色 (c) 請以曲面的曲率來設定曲面的顏色 2. 一個空間中的橢球可以表示成下列方程式 : 請使用任何你可以想到的方法, 畫出三度空間中的一個平滑的橢球, 其中 a = 3,b = 4,c = 8 ( 但不能使用 ellipsoid 指令 ) 3. MATLAB 有一些現成的指令, 可以來畫出特殊立體圖形, 例如, 可以用 sphere 畫出圓球, 用 cylinder 畫出圓柱體, 用 ellipsoid 畫出橢球, 請試試看 4. 請用 ez 開頭的繪圖指令 ( 例如 ezmesh ezsurf ezmeshc ezsurfc ezplot3 ezcontour 等 ), 畫出一個你認為最炫的立體圖形 5. ( 腦力激盪題 ) 我們可用 subplot 在同一個視窗畫出兩個不同的曲面圖 你是否可想出一個聰明的辦法, 讓這兩個曲面圖各自用到不同的顏色對應表? 請舉例說明 4-26