




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MATLAB 程式設計入門篇 動畫製作,張智星 清大資工系 補充內容:方煒 台大生機系,6-1 MATLAB 動畫簡介 6-2 以電影方式產生動畫 (a).電影動畫之範例一 (b).電影動畫之範例二 (c).電影動畫之範例三 6-3以物件方式產生動畫 (a).曲線的動畫 (b).曲線的 EraseMode (c).物件動畫之範例,6-1 MATLAB 動畫簡介,MATLAB 產生動畫的方式有兩種: 電影方式: 以影像的方式預存多個畫面,再將這些畫面快速的呈現在螢幕上,就可以得到動畫的效果。此種方式類似於電影的原理,可以產生很繽紛亮麗的動畫,但是其缺點為每個畫面都必需事先備妥,無法進行及時成像(Real-time Rendering),而且每個畫面,以至於整套動畫,都必需佔用相當大的記憶體空間。 物件方式: 在 MATLAB 的握把式圖形(Handle Graphics,詳見本書第七章)概念下,所有的曲線或曲面均可被視為一個物件,MATLAB 可以很快的抹去舊曲線,並產生相似但不同的新曲線,此時就可以看到曲線隨時間而變化的效果。使用物件方式(即握把式圖形)所產生的動畫,可以呈現即時的變化,也不需要太高的記憶體需求,但其缺點是較難產生太複雜的動畫。,6-2 以電影方式產生動畫,以電影方式來產生動畫,可由下列兩個步驟來達成: 使用 getframe 指令來抓取圖形做為電影的畫面,每個畫面都是以一個行向量的方式,置放於整個代表電影的矩陣。 使用 movie 指令來播放電影,並可指定播放的重複次數及每秒播放的畫面數目。,電影動畫之範例一,在下例中,我們將以不同的角度來顯示 peaks 函數,並將其結果以電影的方式來呈現動畫。 範例6-1: movie01.m,clear M % 清除電影資料矩陣 M n = 50; % 抓取 50 個畫面 peaks; fprintf(抓取畫面中.n); for i = 1:n view(-37.5+i*360/n, 30); % 改變觀測角度 M(i) = getframe; % 抓取畫面,並存入電影資料矩陣 M end fprintf(播放電影中.n); movie(M, 3); % 播放電影三次,電影動畫之範例一,最後一個 frame 的畫面,電影動畫之範例二,將 peaks 函數畫在圓盤上,然後再變換此函數的高度,以動畫呈現 範例6-2: movie02.m,clear M % 清除電影資料矩陣 M r=linspace(0, 4, 30); % 圓盤的半徑 t=linspace(0, 2*pi, 50); % 圓盤的極座標角度 rr, tt=meshgrid(r, t); xx=rr.*cos(tt); % 產生圓盤上的 x 座標 yy=rr.*sin(tt); % 產生圓盤上的 y 座標 zz=peaks(xx,yy); % 產生 peaks 在極座標的資料 n = 30; % 抓取 30 個畫面 scale = cos(linspace(0, 2*pi, n); fprintf(抓取畫面中.n); for i = 1:n surf(xx, yy, zz*scale(i); % 畫圖 axis(-inf inf -inf inf -8.5 8.5); % 固定圖軸的範圍 box on M(i) = getframe; % 抓取畫面,並存入電影資料矩陣 M end fprintf(播放電影中.n); movie(M, 5); % 播放電影 5 次,電影動畫之範例二,最後一個 frame 的畫面,電影動畫之範例三,改變影像的色盤矩陣,讓影像出現從正片變到負片的效果 範例6-3: movie03.m,clear M % 清除電影資料矩陣 M load clown.mat image(X); colormap(map); % 畫出小丑臉 n = 30; % 抓取 30 個畫面 scale = cos(linspace(0, 2*pi, n); fprintf(抓取畫面中.n); for i = 1:n colormap(i-1)*(1-map)+(n-i)*map)/n); % 改變色盤矩陣 M(i) = getframe; % 抓取畫面,並存入電影資料矩陣 M end fprintf(播放電影中.n); movie(M, -5); % 播放電影 5 次(含正向與逆向播放),電影動畫之範例三,在上述範例中,正片(如下張投影片圖左)的色盤矩陣是 map,而 1-map 則是負片(如下張投影片圖右)的色盤矩陣,因此我們在抓影片時,讓色盤矩陣進行漸進式的變化,因此呈現的電影就有從正片變到負片的效果。 另外,movie(M, -5) 代表電影將播放 5 次,但由於第二個參數是負數,所以每次播放會包含一次正向播放及一次逆向播放。,電影動畫之範例三,正片 色盤矩陣是 map,負片 色盤矩陣是 1-map,電影動畫的其他範例,MATLAB 的 demo 程式中亦包含了數個與電影方式相關的動畫,讀者可以在指令視窗輸入下列任一指令: xpmovie vibes xpmovie logospin xpmovie crulspin,6-3 以物件方式產生動畫,以電影方式產生動畫可以說是暴力法,因為此方法佔掉了許多記憶體空間。另一個技巧性較高的方法則是以物件方式產生動畫,此種方法不需要大量的記憶體,而且可以產生即時(Real-time)或互動式(Interactive)的動畫。 MATLAB 的所有圖形元件(曲線、曲面、圖軸等)都是物件,您可以控制這些物件的各種性質,此種特性稱為握把式圖形(Handle Graphics),可詳見第七章。握把式圖形包含的層面很廣,但牽涉到動畫部份的基本概念並不複雜,以下我們以曲線的動畫來說明。,曲線的動畫,我們可以快速地改變圖形物件的性質(如顏色、座標等),就可以達到動畫的效果 每一條曲線都有下列三種性質: xdata:此為一向量,代表曲線的 x 座標值 ydata:此為一向量,代表曲線的 y 座標值 EraseMode:此為一字串,代表曲線被抹除的方式,亦即當 xdata 或 ydata 被改變時,對於舊曲線的處理方式。,曲線的 EraseMode,EraseMode 對於動畫的呈現相當重要,此字串可是下列幾種選擇: normal:重畫整個畫面。 xor:將舊曲線的點以 xor 的方式還原。 background:將舊曲線的點改成背景顏色。 none:保留舊曲線的點,不做任何處理。 在上述四種 EraseMode 中,耗費時間的次序是 normal xor background none xor 和 background 很接近,但是 background 會抹去其他舊曲線所掃過的其他物件(如圖軸、格線、另一條曲線等),所以較少用到,所以一般在產生動畫時,最常用到的 EraseMode 就是 xor。,曲線的動畫,有了這些概念後,產生曲線的動畫就很容易了!其主要步驟有兩點: 產生一條曲線,其 EraseMode 為 xor,background,或 none。 在 for-loop 之中,改變此曲線的 xdata 或 ydata(或兩者)。 我們產生一條隨 x 而衰減的正弦曲線,並讓 k 隨時間而便大(即改變正弦波的相角),使整條曲線產生舞動的效果。,物件動畫之範例一,我們產生一條衰減的正弦曲線 讓 k 隨時間而便大(即改變正弦波的相角),使整條曲線產生舞動的效果。 範例6-1: movie04.m,x = 0:0.1:8*pi; h = plot(x, sin(x).*exp(-x/5), EraseMode, xor); axis(-inf inf -1 1); % 設定圖軸的範圍 grid on % 畫出格線 for i = 1:5000 y = sin(x+i/50).*exp(-x/5); set(h, ydata, y); % 設定新的 y 座標 drawnow % 立即作圖 end,物件動畫之範例一,我們產生一條衰減的正弦曲線 讓 k 隨時間而便大(即改變正弦波的相角),使整條曲線產生舞動的效果。 範例6-1: movie04.m,x = 0:0.1:8*pi; h = plot(x, sin(x).*exp(-x/5), EraseMode, xor); axis(-inf inf -1 1); % 設定圖軸的範圍 grid on % 畫出格線 for i = 1:5000 y = sin(x+i/50).*exp(-x/5); set(h, ydata, y); % 設定新的 y 座標 drawnow % 立即作圖 end,物件動畫之範例一,最後一個 frame 的畫面,物件動畫之範例一,在上例中,我們使用 set 指令,總共改變曲線的 y 座標 5000 次,並以 xor 的方式抹掉舊曲線。 drawnow 的作用是使 MATLAB 立刻處理 set 指令,若無 drawnow,MATLAB 會累積 set 指令,直到 for-loop 結束時再一併處理圖形的變化,這時就不會看到動畫的效果。 如果您將上例的 EraseMode 改成 background,則會發現曲線會“抹掉”圖形中的格線及代表圖軸的直線。 如果您將上例的 EraseMode 改成 none,則舊的曲線會被保留下來,產生不同的效果。,物件動畫之範例: MATLAB,MATLAB 有很多物件動畫之範例: lorenz:以3D動畫呈現的 Lorenz 混沌方程式(Chaotic Equation),好像慧星在運行。 truss:一座橋樑在地震時的震動方式,共有 12 種喔! travel:顯示如何以雜亂搜尋(Random Search)的方式來解 Traveling Salesperson Problem. fitdemo:顯示如何以 Downhill Simplex Search 來解決非線性曲線擬合(Nonlinear Curve Fitting)的問題。 spinner:常見的螢幕保護程式。 xphide:試試您的眼力。,物件動畫之範例: Simulink,若您有安裝 Simulink,可試試下列動態系統模擬加上動畫呈現: onecart:傳統的彈簧加上砝碼的動態系統。 dblcart1:一條彈簧加上兩個砝碼的動態系統。 simppend:簡單的單擺系統。 dblpend1:兩截的擺動系統。 dblpend2:更複雜的擺動系統。 penddemo:倒單擺系統。,物件動畫之範例: 模糊工具箱,如果您有安裝 Fuzzy Logic Toolbox,可以試試由張老師開發的各項模擬及動畫展示: fcmdemo: Fuzzy C-means Clustering。 juggler:用板子接皮球。 invkine:兩截機器手臂的 Inverse Kinematics。 slcp1:倒單擺,桿子長度隨時間而變,您可以控制所欲到達的位置。 slcpp1:雙倒單擺,其中一個桿子的長度隨時間而變,您可以控制所欲到達的位置。 slbb:蹺蹺板加上滾球系統,您可以控制球的最後位置。 sltbu:倒車入庫系統,以物件方式產生動畫,呈現一個小圓(半徑為 1)在一個大圓(半徑為 3)的圓周外部滾動的動畫。,function mymovie02 close all theta = 0:0.1:2*pi; r1 = 3; x1 = r1*cos(theta); y1 = r1*sin(theta); plot(x1, y1), axis image % 大圓 r2 = 1; center = (r1+r2)*1, 0; x2 = r2*cos(theta); y2 = r2*sin(theta); h = line(center(1)+x2, center(2)+y2, EraseMode, xor, color, r); % 小圓 axis(-5 5 -5 5); % 設定圖軸的範圍 n = 5; % 轉5圈 theta1 = 0:0.005:n*2*pi; for i = 1:length(theta1); center = (r1+r2)*cos(theta1(i), sin(theta1(i); set(h, xdata, center(1)+x2, ydata, center(2)+y2); % 設定小圓的 x, y 座標 drawnow % 立即作圖 end,function mymovie02_2 close all theta = 0:0.1:2*pi; r1 = 3; circle1 = r1*exp(sqrt(-1)*theta); % 大圓 plot(circle1), axis image r2 = 1; circle2 = r2*exp(sqrt(-1)*theta); % 小圓 center = r1+r2; h = line(real(center+circle2), imag(center+circle2), EraseMode, xor, color, r); axis(-5 5 -5 5); % 設定圖軸的範圍 n = 5; % 轉5圈 theta1 = 0:0.005:n*2*pi; for i = 1:length(theta1); center = (r1+r2)*exp(sqrt(-1)*(theta1(i); set(h, xdata, real(center+circle2), ydata, imag(center+circle2); % 設定小圓的 x, y 座標 drawnow % 立即作圖 end,以物件方式產生動畫,呈現一個圓圈(半徑為 1)由畫面左邊滾到右邊,圓周上的任一點所拉出的一條擺線。,function cycloid01 % 擺線的動畫, x = 0:0.01:5*pi; theta = linspace(0, 2*pi); r = 1; circle = j+r*exp(sqrt(-1)*theta); subplot(2,1,1); circleH=plot(circle); axis image set(circleH, erase, xor); axis(min(x)-r, max(x)+r, -0.5, 2*r+0.5); dot1H=line(0, 0, marker, o,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年合肥肥西县桃花初级中学教师招聘考试试题(含答案)
- 法院考试面试题及答案
- 湘西中考试题及答案
- 2025年灌南县教育系统招聘教师考试笔试试题(含答案)
- 校保卫处消防知识培训课件
- 急救技能知识模拟试题库及答案
- 饭店服务与管理试题库含答案
- 医院突发事件应急处理培训考核试题及答案
- 急救药品考试题(含答案)
- 放射医学技术(士、师)考试题库含答案
- 2025年吉林银行招聘考试(综合知识)历年参考题库含答案详解(5套)
- 2025-2026秋学期学校主题升旗仪式安排表+主题班会安排表
- 出租充电桩车位合同范本
- 2025年广元市中考数学试题卷
- 人工晶体创新创业项目商业计划书
- 开放性骨折感染预防的护理
- 特殊困难老年人家庭适老化改造项目方案投标文件(技术方案)
- 特殊药品管理知识讲课文档
- 2025至2030中国智能算力行业发展趋势分析与未来投资战略咨询研究报告
- 2025年小额贷款合同范本
- 混泥土计量管理办法
评论
0/150
提交评论