趣味學編程│MATLAB表白教程
GIF
年假將至,又快到今年情人節,「趣味學編程」系列第一期,就用MATLAB寫一段代碼,實現「心動」效果:
GIF
1
製作動畫
回到正題,本期的目的是學習編程哈~下面就來講解實現「心動」效果的MATLAB函數句法。要製作動圖,用到以下函數:
linspace(x1,x2,N):產生x1,x2之間的N點行矢量,相鄰數據跨度相同。其中x1、x2、N分別為起始值、終止值、元素個數;若預設N,默認點數為100
[x,y,z]=meshgrid(a,b,c):生成三維數組,可用於三變數函數的計算和三維立體圖的繪製
isosurface(X,Y,Z,V,isovalue):從由X,Y,Z構造的體積V數據中提取由isovalue指定的等值數據,返回結果為一個結構體,包含了等值面的頂點和面(頂點的次序),這些參數可以直接傳給patch命令畫出圖形來
set(H,"PropertyName",PropertyValue,…):用屬性值"PropertyValue"設置關於用參量H標誌的對象(一個或多個)的屬性"PropertyName"(一個或多個)
view(AZ,EL):通過方位角AZ和俯視角EL設置觀察圖形的視點,view(3)設置默認的三維視角,AZ=-37.5,EL=30
light("Color",Value1,"Style",Value2,"Position",Value3):Value1取RGB三元組或相應的顏色字元表示光的顏色;Value2取"infinite"和"local"兩個值分別表示無窮遠光和近光;Value3取三維坐標點組成的向量形式[x,y,z],對於遠光它表示光穿過該點射向原點,對於近光它表示光源所在位置。預設默認為白光、無窮遠光、穿過(1,0,1)射向坐標原點
get(H,"PropertyName"):獲取參量H標誌的對象的屬性"PropertyName"
特別要強調for語句循環結構:
格式
for 循環變數=循環變數初值:步長:循環變數終值
循環體
end
需要注意的是,當步長為1時可以省略。在這個for循環中,使用getframe函數捕捉動畫幀並保存到矩陣中,從而創建一個電影動畫矩陣;getframe函數格式有:
格式
F=getframe:從當前圖形框中得到動畫幀
F=getframe(h):從圖形句柄h中得到動畫幀
F=getframe(h,rect):從圖形句柄h的指定區域rec中得到動畫幀
當創建了一系列的動畫幀後,調用movie函數按照指定的速度和次數播放該電影動畫;movie函數格式有:
格式
movie(M):將矩陣M中的動畫幀播放一次
movie(M,n):將矩陣M中的動畫幀播放n次
movie(M,n,fps):將矩陣M中的動畫幀以每秒fps幀的速度播放n次
2
保存動畫
可以使用VideoWrite函數把動畫保存為視頻,創建視頻文件的用法是:
writerObj=VideoWriter(filename,profile):filename是要保存文件的名稱(含擴展名),profile是要保存的視頻文件格式,預設值為"Motion JPEG AVI"
MATLAB支持的視頻文件擴展名
與profile參數值的對應關係
.avi
"Motion JPEG AVI"
.mj2
"Motion JPEG 2000"
.mp4 或 .m4v
"MPEG-4"
MATLAB會報告視頻的保存路徑,這樣就可以脫離MATLAB運行上面製作的動畫:
TAG:公共管理定量方法學習 |