日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MATLAB制作简易小动画入门详解

發(fā)布時間:2023/12/31 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MATLAB制作简易小动画入门详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、引言
Matlab具有強(qiáng)大的可視功能,也可以用其制作動畫。最簡單的實現(xiàn)動畫的方法就是用設(shè)定好目標(biāo)圖元的動作路線,之后使用循環(huán)語句和暫停命令pause來實現(xiàn)更新圖元的位置,這樣動畫就制作完成了。
本文以三只小燕子(可以理解為一家三口,哈哈)在某個區(qū)域內(nèi)飛翔為例,帶你一步一步學(xué)習(xí)簡易動畫的制作。
二、制作簡易動畫步驟
1、繪制動畫的目標(biāo)圖形
1)繪制一只小燕子,可以使用正弦曲線拼接的方法(有點簡單,像簡易硬筆畫),具體做法是:
取0~pi之間的正弦曲線做燕子的翅膀
0~pi/2之間的曲線當(dāng)做右翅膀
pi/2~pi之間的曲線當(dāng)做左翅膀
代碼如下:

x1 = [ 0:0.01:1/2 ] * pi;%右側(cè)翅膀橫坐標(biāo) y1 = sin( x1 ); %右側(cè)翅膀縱坐標(biāo) x2 = [ 1/2:0.001:1 ] * pi;%左側(cè)翅膀橫坐標(biāo) y2 = sin( x2 ); %左側(cè)翅膀縱坐標(biāo) p1 = plot( (x1+pi)/2, (y1+3)/2, 'k' );%右翅膀在右側(cè),所以需要“+pi” hold on p2 = plot( x2/2, (y2+3)/2, 'k' ); axis( [ -8, 10, 0, 10 ] )

繪圖結(jié)果:(有點孤單)


2)繪制另外兩只小燕子,仿照上面的做法即可,代碼如下:

p3 = plot( (x1+pi)/2+2, (y1+3)/3, 'k' ); p4 = plot( x2/2+2, (y2+3)/3 , 'k' ); p5 = plot( (x1+pi)/3-2, (y1+3)/3, 'k' ); p6 = plot( x2/3-2, (y2+3)/3, 'k' );

結(jié)果如下圖所示:

到這里是不是發(fā)現(xiàn)了,畫小燕子原來如此簡單。當(dāng)然了說是鴻雁那就更像了。
2、設(shè)定場景
1)給矩形區(qū)域增加背景色
%給矩形區(qū)域添加背景色

axis( [ -8, 10, 0, 10 ] ) set( gca, 'color', [ 1, 1, 0.9 ] );%gca表示當(dāng)前圖形區(qū)域

2)再畫個紅太陽

%繪制紅太陽 t = (0:0.1:2) * pi; x = 0.5 * cos(t) + 8; y = 0.5 * sin(t) + 9; fill( x, y, 'r' ) axis equal axis( [ -8, 10, 0, 10 ] )%此語句是用來重新調(diào)整繪圖區(qū)域

此時得到的圖像窗口如下圖所示:


3)再畫兩座上(這樣看著是不是背景更豐富一點)
%繪制兩座高山

xh = [ -8 : 0.2 : 8 ]; yh1 = 2 * exp( -(xh + 5).^2 / 2 ); fill( xh, yh1, 'b' ) hold on yh2 = 1.5 * exp( -xh.^2 / 4 ); area( xh, yh2, 'FaceColor', [ 0.1, 0.1, 0.9 ] );

此時動畫的背景就變成了如下圖所示,看起來是不是比上一步的圖好看了一點。當(dāng)然了你也可設(shè)計的更漂亮一些。

3、規(guī)劃運動路線
假設(shè)小燕子沿著正弦曲線或者余弦曲線運動

path_x = [-2 : 0.01 : 2] *pi;%橫坐標(biāo) path_y1 = sin( dir ); %第一只小燕子的飛行路線 path_y2 = cos( dir ); %第二只小燕子的飛行路線 path_y3 = cos( fliplr(dir) );%第三只小燕子的飛行路線

4、運動設(shè)計
把三只小燕子分布放到指定的初始位置,然后用set命令修改每只小燕子對應(yīng)的圖像句柄(p1,p2)、(p3,p4)和(p5,p6)的位置坐標(biāo)即可實現(xiàn)小燕子的位置改變了。再加上循環(huán)語句和暫停命令pause,就是可以實現(xiàn)小燕子的飛行動畫。代碼如下(以飛行5個周期為例,也可以修改周期的值,或者直接改為死循環(huán)也可以):

hight = 2;%設(shè)定小燕子的初始高度 period = 5; %運動周期 k = 0; len = length( path_x ); while k < periodfor i = 1 : lenset( p1, 'Xdata', path_x(i) +(x1+pi)/2, 'Ydata', path_y1(i)+2 + (y1+3)/2 + hight );set( p2, 'Xdata', path_x(i) + x2/2, 'Ydata', path_y1(i) + 2 + (y2+3)/2 + hight );set( p3, 'Xdata', path_x(i)-2 + (x1+pi)/2, 'Ydata', path_y2(i)+2 + (y1+3)/3 + hight );set( p4, 'Xdata', path_x(i)-2 + x2/2, 'Ydata', path_y2(i) + 2 + (y2+3)/3 + hight );set( p5, 'Xdata', path_x(len-i+1) + (x1+pi)/3, 'Ydata', path_y3(i) + 2 + (y1+3)/3 + hight );set( p6, 'Xdata', path_x(len-i+1) + x2/3, 'Ydata', path_y3(i) + 2 + (y2+3)/3 + hight );pause(0.02);endpath_x = fliplr( path_x );%逆向返回飛行k = k + 1; end

至此,關(guān)于小燕子在某個場景中飛行的簡單動畫就繪制完成了。
飛行中兩個場景如下:


三、完整的代碼

%取0~pi之間的正弦曲線做燕子的翅膀 %0~pi/2之間的曲線當(dāng)做右翅膀 %pi/2~pi之間的曲線當(dāng)做左翅膀 clear all clc x1 = [ 0:0.01:1/2 ] * pi;%右側(cè)翅膀橫坐標(biāo) y1 = sin( x1 ); %右側(cè)翅膀縱坐標(biāo) x2 = [ 1/2:0.001:1 ] * pi;%左側(cè)翅膀橫坐標(biāo) y2 = sin( x2 ); %左側(cè)翅膀縱坐標(biāo) p1 = plot( (x1+pi)/2, (y1+3)/2, 'k' );%右翅膀在右側(cè),所以需要“+pi” hold on p2 = plot( x2/2, (y2+3)/2, 'k' ); axis( [ -8, 10, 0, 10 ] ) %規(guī)劃處矩形區(qū)域p3 = plot( (x1+pi)/2+2, (y1+3)/3 + 3, 'k' ); p4 = plot( x2/2+2, (y2+3)/3 + 3 , 'k' );p5 = plot( (x1+pi)/3-2, (y1+3)/3 + 1, 'k' ); p6 = plot( x2/3-2, (y2+3)/3 + 1, 'k' );%給矩形區(qū)域添加背景色 axis( [ -8, 10, 0, 10 ] ) %set( gcf, 'doublebuffer', 'on'); set( gca, 'color', [ 1, 1, 0.9 ] );%gca表示當(dāng)前圖形區(qū)域%繪制紅太陽 t = (0:0.1:2) * pi; x = 0.5 * cos(t) + 8; y = 0.5 * sin(t) + 9; fill( x, y, 'r' ) axis equal axis( [ -8, 10, 0, 10 ] ) %繪制兩座高山 xh = [ -8 : 0.2 : 8 ]; yh1 = 2 * exp( -(xh + 5).^2 / 2 ); fill( xh, yh1, 'b' ) hold on yh2 = 1.5 * exp( -xh.^2 / 4 ); area( xh, yh2, 'FaceColor', [ 0.1, 0.1, 0.9 ] );%運動路線 path_x = [-2 : 0.01 : 2] *pi;%橫坐標(biāo) path_y1 = sin( path_x ); %第一只小燕子的飛行路線 path_y2 = cos( path_x ); %第二只小燕子的飛行路線 path_y3 = cos( fliplr(path_x) );%第三只小燕子的飛行路線 set( gcf, 'doublebuffer', 'on'); hight = 2;%設(shè)定小燕子的初始高度 period = 5; %運動周期 k = 0; len = length( path_x ); while k < periodfor i = 1 : lenset( p1, 'Xdata', path_x(i) +(x1+pi)/2, 'Ydata', path_y1(i)+2 + (y1+3)/2 + hight );set( p2, 'Xdata', path_x(i) + x2/2, 'Ydata', path_y1(i) + 2 + (y2+3)/2 + hight );set( p3, 'Xdata', path_x(i)-2 + (x1+pi)/2, 'Ydata', path_y2(i)+2 + (y1+3)/3 + hight );set( p4, 'Xdata', path_x(i)-2 + x2/2, 'Ydata', path_y2(i) + 2 + (y2+3)/3 + hight );set( p5, 'Xdata', path_x(len-i+1) + (x1+pi)/3, 'Ydata', path_y3(i) + 2 + (y1+3)/3 + hight );set( p6, 'Xdata', path_x(len-i+1) + x2/3, 'Ydata', path_y3(i) + 2 + (y2+3)/3 + hight );pause(0.02);endpath_x = fliplr( path_x );%逆向返回飛行k = k + 1; end

總結(jié)

以上是生活随笔為你收集整理的MATLAB制作简易小动画入门详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。