張智星 (Roger Jang) 清大資工系 多媒體檢索實驗室

Slides:



Advertisements
Similar presentations
張智星 清大資工系 多媒體檢索實驗室 MATLAB 程式設計進階篇 程式計時 張智星 清大資工系.
Advertisements

MATLAB 程式設計 時間量測 清大資工系 多媒體資訊檢索實驗室.
LED CUBE 預期規劃.
Introduction to C Programming
圓的一般式 內容說明: 由圓的標準式展出圓的一般式.
圓的一般式 內容說明: 由圓的標準式展出圓的一般式.
張智星 (Roger Jang) 台大資工系 多媒體檢索實驗室
Chapter 5 迴圈.
自由軟體Firefox安裝 及youtube影片下載
第 1 章 使用 APP INVENTOR 2 開發 ANDROID APP
主講人:資通中心李威頤 校內分機:6111 講義下載: 資料下載
在NS-2上模擬多個FTP連線,觀察頻寬的變化
MATLAB 程式設計入門篇 握把式圖形與 GUI 設計
音訊 延伸學習 Audio Signal Processing and Recognition (音訊處理與辨識) 張智星
MATLAB 程式設計入門篇 握把式圖形與 GUI 設計
MATLAB 程式設計入門篇 握把式圖形與 GUI 設計
R教學 安裝RStudio 羅琪老師.
影格速率與時間軸刻度比例 接著我們再來看看時間軸面板上其它的功能。在時間軸面板下方會顯示目前動畫所設定的影格速率 (Frame Rate ) 等資訊:
Merge Partners’ programs by Matlab
Wavelet transform 指導教授:鄭仁亮 學生:曹雅婷.
張智星 清大資工系 多媒體檢索實驗室 MATLAB小傳與外觀 張智星 清大資工系 多媒體檢索實驗室.
Java 程式設計 講師:FrankLin.
張智星 (Roger Jang) 清大資工系 多媒體檢索實驗室
第十八單元 平面上之參數方程式.
Chap3 Linked List 鏈結串列.
范洪源 臺灣師範大學數學系 分支宣告與程式設計 范洪源 臺灣師範大學數學系.
分支宣告與程式設計 黃聰明 國立臺灣師範大學數學系
邏輯設計--不穩多諧振盪器 通訊一甲 B 楊穎穆.
MATLAB 程式設計入門篇 動畫製作.
Pocket Access.
MATLAB 程式設計入門篇 二維平面繪圖 (part2)
PowerPoint 2019/4/9.
本章學習目標 學習極座標繪圖與對數繪圖 學習雙y軸繪圖 學習向量場繪圖 學習統計繪圖 在Matlab的環境裡製作動畫
第七單元 正反器 (教科書第四章) 數位系統實驗
第九单元 第1课 实验 Matlab动画 1.洛仑兹非线性奇异方程所描述的无序运动 2.作y=sin(x)的程序动画(1)
Working Model 2D 朝陽科技大學 工業設計系 邱相文.
讓Emulator可以 使用Android Market
Definition of Trace Function
使用VHDL設計 七段顯示器 通訊工程系 一年甲班 姓名 : 蘇建宇 學號 : B
張智星 清大資工系 多媒體檢索實驗室 Tree Net Construction 張智星 清大資工系.
MATLAB 程式設計入門篇 二維平面繪圖 改自張智星講義
本章學習目標 學習三維繪圖的基本技巧 學習peaks() 函數的用法 學習二維與三維等高線圖的繪製 學習三維圖形的編修
教學媒體作業 歷史系99級 楊琇媚. 教學媒體作業 歷史系99級 楊琇媚.
指導老師:周建興 老師 開發團隊:吳旻翰、池宗諺 淡江大學電機工程學系 2015/12/11
北投溫泉博物館 建築特色 ★小組成員:高103林孟璇、林念儀、施妤柔★.
圓的定義 在平面上,與一定點等距的所有點所形成的圖形稱為圓。定點稱為圓心,圓心至圓上任意一點的距離稱為半徑,「圓」指的是曲線部分的圖形,故圓心並不在圓上.
Mathematica 動畫教學 -振動模態
1-2 相似三角形 ● 平行線截比例線段性質:兩條直線 M1、M2 被另一組平行線 L1//L2//L3 所截出來的截線段會成比例。
張智星 (Roger Jang) 台大資工系 多媒體檢索實驗室
Video 影像 (VideoPlayer 影像播放器、Camcorder 錄影機) 靜宜大學資管系 楊子青
物理化學輔助學習工具 2018/12/04.
MiRanda Java Interface v1.0的使用方法
PowerPoint 操作介紹 106 計算機概論
函數應用(二)與自定函數.
Dreamweaver 進階網頁製作 B 許天彰.
5. 令圖畫動起來 Tween 功能介紹 移動效果 顏色漸變效果 形狀漸變效果 離開.
10328: Coin Toss ★★★☆☆ 題組:Problem Set Archive with Online Judge
6.1 動畫檔案的格式 6.2 建立合適的動畫元素.
MultiThread Introduction
語音訊號的特徵向量 張智星 多媒體資訊檢索實驗室 清華大學 資訊工程系.
Quiz1 繳交期限: 9/28(四).
第一章 直角坐標系 1-3 函數及其圖形.
第十三章 彩色影像處理.
一 可靠度問題.
第四組 停車場搜尋系統 第四組 溫允中 陳欣暉 蕭積遠 李雅俐.
10303: How Many Trees? ★★☆☆☆ 題組:Contest Archive with Online Judge
Chapter 4 Multi-Threads (多執行緒).
Unix指令4-文字編輯與程式撰寫.
物理化學輔助學習工具 2018/12/04.
Presentation transcript:

張智星 (Roger Jang) jang@mirlab.org http://mirlab.org/jang 清大資工系 多媒體檢索實驗室 MATLAB 程式設計入門篇 動畫製作 張智星 (Roger Jang) jang@mirlab.org http://mirlab.org/jang 清大資工系 多媒體檢索實驗室

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 個畫面 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

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(或兩者)。

物件動畫之範例一 我們產生一條衰減的正弦曲線 讓 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,則舊的曲線會被保留下來,產生不同的效果。

當電腦夠快時 當你的電腦夠快時,產生動畫變得更簡單! movie042.m x = 0:0.1:8*pi; for i = 1:5000 plot(x, sin(x-i/50).*exp(-x/5)); axis([-inf inf -1 1]); grid on drawnow end

物件動畫之範例: MATLAB MATLAB 有很多物件動畫之範例: lorenz:以3D動畫呈現的 Lorenz 混沌方程式(Chaotic Equation),好像慧星在運行。 truss:一座橋樑在地震時的震動方式,共有 12 種喔! travel:顯示如何以雜亂搜尋(Random Search)的方式來解 Traveling Salesperson Problem. fitdemo:顯示如何以 Downhill Simplex Search 來解決非線性曲線擬合(Nonlinear Curve Fitting)的問題。

物件動畫之範例: Simulink 若您有安裝 Simulink,可試試下列動態系統模擬加上動畫呈現: onecart:傳統的彈簧加上砝碼的動態系統。 dblcart1:一條彈簧加上兩個砝碼的動態系統。 simppend:簡單的單擺系統。 dblpend1:兩截的擺動系統。 dblpend2:更複雜的擺動系統。 penddemo:倒單擺系統。

物件動畫之範例: 模糊工具箱 如果您有安裝 Fuzzy Logic Toolbox,可以試試由張老師開發的各項模擬及動畫展示: fcmdemo: Fuzzy C-means Clustering。 juggler:用板子接皮球。 invkine:兩截機器手臂的 Inverse Kinematics。 slcp1:倒單擺,桿子長度隨時間而變,您可以控制所欲到達的位置。 slcpp1:雙倒單擺,其中一個桿子的長度隨時間而變,您可以控制所欲到達的位置。 slbb:蹺蹺板加上滾球系統,您可以控制球的最後位置。 sltbu:倒車入庫系統