Você está na página 1de 70

ha ng trong Matlab

Sinh vin: T Nguyn Thi Sn


MSSV: 1111279
Lp CNTN K2011
GVHD: Trnh Anh Ngc
Ngy 3 thng 1 nm 2013
Tm tt ni dung
Ti liu s trnh by 2 cch - phng php v hnh ng c bn
trong MATLAB, cng cc lnh c bn thc hin, lu nh .gif v
movie .avi. Bn cnh a ra mt s v d, c bit l cc phng
trnh sng v dao ng. Cc v d test hot ng tt trn phin
bn MATLAB R2010a (7.10.0)
1
Mc lc
Mc lc 2
1 Cc kin thc c bn to hnh ng 4
1.1 Handle graphics Objects . . . . . . . . . . . . . . . . . . . . 4
1.2 Hm drawnow . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Hm delete . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 Hm getframe . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.5 Hm movie . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.6 Hm moviein . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.7 Hm pause . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.8 Hm figure . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.9 Hm view . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.10 Hm set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2 V hnh ng trong MATLAB 18
2.1 Phng php th nht . . . . . . . . . . . . . . . . . . . . . 18
2.1.1 Nguyn l ca phng php . . . . . . . . . . . . . . 18
2.1.2 Erase Mode . . . . . . . . . . . . . . . . . . . . . . . 19
2.1.3 V d minh ha . . . . . . . . . . . . . . . . . . . . . 20
2.2 Phng php th hai . . . . . . . . . . . . . . . . . . . . . . 25
2.2.1 Nguyn l ca phng php . . . . . . . . . . . . . . 25
2.2.2 V d minh ha . . . . . . . . . . . . . . . . . . . . . 26
3 Cc v d dng v hnh ng 29
3.1 ng trn vi kim ng h . . . . . . . . . . . . . . . . . . 29
3.2 Mt chuyn ng n gin . . . . . . . . . . . . . . . . . . . 32
3.3 Mt astroid quay trong khng gian 3 chiu . . . . . . . . . . 35
3.4 Cc phng trnh sng . . . . . . . . . . . . . . . . . . . . . 40
3.4.1 V vi hm sin . . . . . . . . . . . . . . . . . . . . . 41
3.4.2 V vi hm gauss . . . . . . . . . . . . . . . . . . . . 45
3.4.3 M rng sng gauss . . . . . . . . . . . . . . . . . . . 46
2
MC LC 3
3.4.4 Mt v d khc v phng trnh sng . . . . . . . . . 48
3.5 Dao ng l xo . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.6 Mt sng 3D . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.7 Mt besselj . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.8 Hnh m dng quay . . . . . . . . . . . . . . . . . . . . . . 56
3.9 Astroid quay trong mt phng 2 chiu . . . . . . . . . . . . 59
3.10 M phng con lc n . . . . . . . . . . . . . . . . . . . . . 61
4 nh v movie trong matlab 65
4.1 Lu chuyn ng thnh file nh .gif . . . . . . . . . . . . . . 65
4.2 Lu chuyn ng thnh file movie .avi . . . . . . . . . . . . 67
Ti liu tham kho 70
Chng 1
Cc kin thc c bn to
hnh ng
Phn ny ch trnh by cc kin thc, c php cn thit, y hn xem
help.
1
1.1 Handle graphics Objects
Mt i tng thuc loi handle graphics l mt cu trc hng i tng
to, thao tc v hin th ha. Tm li, bin loi ny dng xc nh mt
i tng.
i tng ha l nhng yu t v c bn c s dng trong MAT-
LAB. Mi i tng ha c:
Mt nh danh duy nht, c gi l mt handle
Mt tp hp cc c im, c gi l properties
V d, khi v th hm y = cos(x) ta c th nh danh cho th
(thuc loi Handle graphics Objects)
x = 0:pi/100:2*pi;
h = plot(cos(x), LineWidth, 2)
Khi ta c th tc ng ln th ny thng qua bin iu khin nh
danh h, nh thay i mu sc, nt v, . . . cho th.
1
Cc c php ca hm c lc b nhng ni dung khng nm trong khun kh bo
co
4
CHNG 1. CC KIN THC C BN TO HNH NG 5
syms x
h = ezplot(cos(x))
set(h,Color, black)
set(h,LineWidth,10)
Cc hm chc nng hu dng trong ci t thuc tnh
1. 0 - Object loi handle c bn nht, l gc iu khin mn hnh
2. gcf - tr v bin handle iu khin ca s ha hin ti
3. gca - tr v bin handle iu khin trc ta trong ca s ha
hin ti
4. findobj(handles,PropertyName,PropertyValue) tm trong ca
s ha v tr v i tng c cc tnh cht nh mong mun. y
l mt cch tm kim cc i tng (nh mt th) khi ta v n m
khng i km nh danh, nhng v sau cn tc ng mt s thuc
tnh ln n.
Chi tit hn v cc thuc tnh PropertyName v PropertyValue xem
trong Help ca Matlab
1.2 Hm drawnow
Cng dng V mt i tng ti ngay thi im trnh bin dch (com-
piler) bin dch n dng .
C php v m t chi tit drawnow
drawnow xa hng i (queue) cc i tng ang ch c x l v
cp nht i tng ang c thc thi ln ca s hnh nh. Hng i y
ging nh khi nim queue trong tin hc, l mt vt cha (container) hot
ng theo co ch LIFO (Last In First Out). Nguyn tc thc hin ca
my tnh hay MATLAB l tip nhn cc s kin theo th t tuyn tnh,
xp vo queue v s l tun t nhng ci n trc nht.
Nm na c th hiu l qua mi lt lp, ta phi gi drawnow MAT-
LAB thc s hin th tng hnh v. Cn nu khng, n s i n tn khi
v xong ht cc hnh ri mi cp nht qu trnh hin th.
CHNG 1. CC KIN THC C BN TO HNH NG 6
V d Xem on chng trnh sau
axis([-5 5 -1 1])
x = -pi:pi/200:pi;
hold on
for i=1:length(x)
plot(x(i),cos(x(i)),-o,LineWidth,5)
drawnow
end
title(y = cos(x))
hold off
Khi khng c lnh drawnow trong vng lp th on code trn tng t
nh kt qu thu c khi chy on code
x = -pi:pi/200:pi;
plot(x,cos(x),-o,LineWidth,5)
title(y = cos(x))
Khi c drawnow, matlab khng v mt ln m ta s c mt ng i hin
th dn dn ln mn hnh t im u n im cui ca hm y = cos(x)
1.3 Hm delete
y l hm thng dng trong phng php v v xa 2.1.
Cng dng Xa mt file hoc mt i tng ha thng qua bin
handle
C php
delete filename
xa tp tin c tn filename lu trn a. Cc tn ny c th km cng
vi ng dn
delete(h)
xa cc i tng ha vi bin nh danh handle h. Xa i tng
m khng yu cu xc minh ngay c khi i tng l mt ca s.
delete(filename)
Mt dng ca hm delete, xa tp tin khi khi tn c lu dng
mt chui
CHNG 1. CC KIN THC C BN TO HNH NG 7
V d
x = -pi:pi/200:pi;
h = plot(x,cos(x))
title(y = cos(x))
delete(h)
1.4 Hm getframe
Cng dng getframe Ly khung hnh cho vo movie
C php v m t
getframe tr v mt khung hnh. Mt khung hnh l mt snapshot
nh chp nhanh (pixmap) ca h ta hoc nh hin ti.
F = getframe ly mt khung hnh t trc ta hin ti.
F = getframe(h) ly 1 khung hnh t nh hoc trc ta hin ti
xc nh bi bin iu khin h mt gi tr to ra lm nh danh
cho mt i tng. V d khi ta v bng lnh plot, ta c th nh
danh cho i tng theo kiu h = plot(x,cos(x))
F = getframe(h,rect) ch nh mt khu vc hnh ch nht copy
nh pixmap vo. rect lin quan n gc di bn tri ca cc con s
hoc trc h, trong cc n v im nh. rect l mt vector bn yu
t [left bottom width height], chiu rng v chiu cao xc nh
kch thc ca hnh ch nht
F = getframe(...) tr v mt khung hnh, c cu trc gm 2 trng:
cdata Hnh nh c lu tr dng ma trn uint8. S chiu
ca F.cdata l height-by-width-by-3
colormap colormap lu tr hnh nh dng ma trn n-by-3.
F.colormap l rng trn h mu chun.
to ra mt bc hnh, s dng phng php sau:
F = getframe(gcf);
image(F.cdata)
colormap(F.colormap)
CHNG 1. CC KIN THC C BN TO HNH NG 8
Nhn xt Thng thng, getframe c dng trong vng lp for
thu thp mt mng cc khung hnh ca movie trnh chiu li khi dng
hm movie.
V d
for j = 1:n
plotting commands
F(j) = getframe;
end
movie(F)
Khu vc thu hnh Lu rng
F = getframe tr v ni dung ca cc trc hin nh, khng bao gm
cc nhn ca cc trc, tiu , nhn nh du.
F = getframe (GCF) thu li ton b nhng g c trong ca s hnh
nh hin ti.
F = getframe (h, rect) thu li hnh nh c c menu ca s vi
mt hnh ch nht c kch thc bao gm thanh menu.
V d To s di ng ca hm peaks
2
Z = peaks; surf(Z)
axis tight
set(gca,nextplot,replacechildren);
for j = 1:20
surf(sin(2*pi*j/20)*Z,Z)
F(j) = getframe;
end
movie(F,20)
V kt qu xem hnh 1.1
2
Hm peaks l mt v d ci sn v hm 2 bin ca Matlab. Thu c t phn b
Gauss. Chi tit xem help peaks trong Matlab.
CHNG 1. CC KIN THC C BN TO HNH NG 9
Hnh 1.1: th hm peaks
1.5 Hm movie
Cng dng movie
Trnh chiu mt on video c thu li t nhng khung hnh
C php v m t movie trnh chiu mt on phim bi mt ma trn
m cc ct ca n l cc khung hnh (thng c ly t lnh getframe),
chi tit v getframe xem 1.4
movie(M) trnh chiu on movie trong ma trn M mt ln duy
nht.
movie(M,n) trnh chiu mt on movie n ln. Nu n m, mi chu
k c chiu ti v ngc tr li. Nu n l mt vector, phn t u
tin l s ln trnh chiu on video, v nhng phn t cn li to ta
mt danh sch cc khung hnh c trnh chiu trong on movie.
CHNG 1. CC KIN THC C BN TO HNH NG 10
V d nu M c 4 khung hnh th n = [10 4 4 2 1] s chi movie 10
ln, v on phim s bao gm 4 khung hnh, u tin l khung hnh
th 4, ri khung hnh th 4 ln na, ri n khung hnh th 2 v cui
cng l khung hnh th 1.
movie(M,n,fps) trnh chiu movie vi "fps" khung hnh trn 1 giy.
Gi tr mc nh l 12 khung hnh trn 1 giy. My tnh khng th
t c kh nng "tc chi cng nhanh cng tt".
movie(h,...) trnh chiu cc movie gia bc hnh hay trc ta
c nhn dng bi iu khin bi bin h
movie(h,M,n,fps,loc) Ch r mt vector v tr gm 4 thnh phn
[x y 0 0] ni m gc di bn tri ca khung phim c neo gi (ch
c hai yu t u tin trong vector c s dng). Vi v tr l tng
i so vi gc di bn tri ca cc con s hoc trc quy nh bng
cch x l qua bin h v trong cc n v ca cc im nh, bt k
thuc tnh ca i tng.
Nhn xt Hm movie hin th mi khung hnh v load n vo b nh,
v sau trnh chiu on movie. iu ny gip loi b s chm tr lu
di vi mt mn hnh trng khi bn ti mt b phim nhiu b nh. Chu
k np ca b phim khng c coi l mt trong nhng ln lp li.
V d To ra hnh ng vi hm "nh chp" vi cc gi tr ca hm
Z = peaks; surf(Z);
axis tight
set(gca,nextplot,replacechildren);
% Thu hnh vo movie
for j = 1:20
surf(sin(2*pi*j/20)*Z,Z)
F(j) = getframe;
end
% Chi movie 20 ln
movie(F,20)
Ghi ch Hm set trong v d trn xem 1.10.
CHNG 1. CC KIN THC C BN TO HNH NG 11
1.6 Hm moviein
Cng dng movienin Ch nh gi tr b nh cho cc khung hnh movie
C php - ngha
moviein(n) Dnh b nh lu n khung hnh
Ch Cc phin bn v sau (t Matlab 5.3 tr i), hm ny khng cn
cn thit v b nh c cp pht mt cch t ng.
V d to mt movie, ta c th lm nh sau
for j=1:n
%%%% V ni dung
M(j) = getframe;
end
movie(M)
code c th chy c trn mi phin bn Matlab, ta phi dng
M = moviein(n);
for j=1:n
%%%% V ni dung
M(:,j) = getframe;
end
movie(M)
1.7 Hm pause
Cng dng Tm dng s thc thi tm thi.
C php v m t
pause
Bn thn n lm cho M-files tm dng v ch cho n khi ngi dng
nhn bt k phm no trc khi tip tc.
CHNG 1. CC KIN THC C BN TO HNH NG 12
pause(n)
Tm dng s thc thi n giy trc khi tip tc. Vi n c th l s
thc khng m bt k.
pause on
Cho php dy cc lnh tm dng tip theo pha sau c hiu lc.
pause off
m bo rng bt k lnh pause hoc pause(n) pha sau khng
thc hin tm dng. iu ny cho php cc kch bn tng tc bnh
thng chy khng cn gim st.
V d
axis([-5 5 -1 1])
x = -pi:pi/200:pi;
hold on
for i=1:length(x)
plot(x(i),cos(x(i)),-o,LineWidth,5)
pause(0.01)
drawnow
end
title(y = cos(x))
hold off
1.8 Hm figure
Cng dng To ra mt ca s ha, v d
C php v m t
figure
To ra mt ca s ha mi
figure(PropertyName,PropertyValue,...)
To ra mt ca s ha mi vi cc thuc tnh PropertyName
mang cc gi tr PropertyValue
figure(n) vi n l s nguyn dng.
To ra ca s ha th n
CHNG 1. CC KIN THC C BN TO HNH NG 13
h = figure(...)
a bin h thnh bin iu khin ca s ha.
V d to mt ca s ha vi kch thc bng 1/4 mn hnh, v
tr nm pha trn bn tri, ta s dng Object ScreenSize
3
xc nh kch
thc. ScreenSize l mt vector 4 phn t [left, bottom, width, height]
scrsz = get(0,ScreenSize);
figure(Position,[1 scrsz(4)/2 scrsz(3)/2 scrsz(4)/2])
Khi ny ca s ha
to ra ging nh bn cnh.
Vn l mt ca s ha rng
do ta cha v g ln n.
to ca s ha full mn hnh, dng
scrsz = get(0,ScreenSize);
figure(Position,[1 scrsz(2) scrsz(3) scrsz(4)])
1.9 Hm view
Cng dng iu khin im nhn (gc nhn)
C php v m t Mt gc nhn trong MATLAB c xc nh bi 2
thng s, minh ha bi hnh sau. Cc mi tn ch hng qut ca gc
Azimuth
Elevation
MATLAB t ng la chn gc nhn theo trng hp 2-D hay 3-D:
Trong ch 2D, mc nh Azimuth= 0

v Elevation= 90

Trong ch 3D, mc nh Azimuth= 37.5

v Elevation= 30

3
Chi tit v ScreenSize xem help
CHNG 1. CC KIN THC C BN TO HNH NG 14
Hnh 1.2: Cc thng s xc nh mt im nhn
C php view([x y]) trong
x tnh bng , i din cho s o gc Azimuth
y tnh bng , i din cho s o gc Elevation
V d Cng mt ng astroid: y
2
3
+ z
2
3
= 2
2
3
trong khng gian 3 chiu
vi 2 gc nhn view([30 60]) v view([90 0])
C th dng nhanh view(3) thit lp ch 3D vi gc nhn mc nh,
view(2) thit lp ch 2D vi gc nhn mc nh
CHNG 1. CC KIN THC C BN TO HNH NG 15
1.10 Hm set
Cng dng set ci t thuc tnh cho i tng
C php v m t chi tit Ta ch cp cc lnh set dng trong
khun kh bo co
set(H,PropertyName,PropertyValue,...)
Ci t thuc tnh PropertyName mang gi tr PropertyValue, c
rt nhiu PropertyName trong Matblab v tht s khng cn thit
lit k ra ht y, v chng c trong Help, v mt s thuc tnh
nm ngoi khun kh bo co ny.
V d set(H,PropertyName,PropertyValue,...)
Thay v chnh trc tip cc thng s v thuc tnh ng thng, nt
v,. . . khi dng
plot(x,y,rs,LineWidth,2,MarkerEdgecolor,k,...)
ta c th gn th vo mt bin handle h ri thay i cc thuc tnh
nh sau
x = 0:pi/50:2*pi;
h = plot(cos(x))
set(h,LineWidth,2,{LineStyle},{--})
set(h,{Color},{r})
nh du cc chia trn trc Oy theo mun
x = 0:1:100;
h = plot(x.^2 + 2*x)
set(gca,ytick,[2 1000 2000 3000 4000 5000])
CHNG 1. CC KIN THC C BN TO HNH NG 16
Chnh t l ca hnh 3D, vector [2.5 2.5 1] chnh l t l tng ng
trc Ox, Oy, Oz, trong trng hp 2D khng quan tm thnh phn
th ba nhng c php bt buc phi c, ch cn dng thm view(2)
set(gca,PlotBoxAspectRatio,[2.5 2.5 1])
Sau mi ln cp nht hnh nh v v li ln ca s ha, nu hnh
mi c t l ln hn hay nh hn,. . . th MATLAB t ng iu chnh
h trc ta ca hnh cho ph hp. Dn n khi lm hnh ng, do
cc trc thay i ngoi mun s gy ra hin tng git. ngn
nga tnh trng , ta dng
set(gca,NextPlot,replacechildren)
lnh ny, s ngn nga hm plot tr v axis normal sau mi ln v
4
lm cho s chuyn ng mt m hn, dng lnh set vi cc thuc
tnh v Renderer
5
set(gcf,Renderer,OpenGL);
Khi dng phng php v v xa (Xem 2.1), ta c th chn mt s
thuc tnh v cch xa to ra s mt m hn cho chuyn ng,
chng c dng vi set, chi tit xem 2.1.2.
4
Chi tit xem thuc tnh NextPlot v replacechildren trong help
5
Xem help c chi tit v Renderer, c cc gi tr PropertyValue l [ painters
| zbuffer | OpenGL | None ]
CHNG 1. CC KIN THC C BN TO HNH NG 17
set(h,EraseMode,normal);
Chnh mu nn cho ca s ha
h = figure(1)
set(gca,color,b)
set(h,color,r)
% = set(gcf,color,r)
Xa (khng hin th cc trc ta ), dng li ytick v xtick trn
x = 0:1:100;
h = plot(x.^2 + 2*x)
set(gca,xtick,[])
set(gca,ytick,[])
Chng 2
V hnh ng trong MATLAB
Trong phn ny, ta s ni ti 2 cch to ra hnh ng bng MATLAB
1. "On the fly" - Lin tc xa v sau v li cc i tng trn mn
hnh, mi ln v li c s thay i nh, qu trnh ny s lm nn s
chuyn ng cho i tng, vi mc thay i nh lm ra s mt
m cho chuyn ng.
2. "Frame by Frame" (Chp khung hnh v pht li ) - Ti mi im
hin th mt hnh v, ta lu li n nh mt khung hnh (frame). Tt
c cc hnh nh (frame) khc nhau c lu li v sau chi
chng tr li nh mt b phim.
2.1 Phng php th nht
y l k thut v, ty xo, v sau v li, c mt s ch (mode) v
v xa khc nhau c h tr bi MATLAB.
2.1.1 Nguyn l ca phng php
Ta to hnh ng bng cch v v xa lin tc mt i tng trn mn
hnh, mi ln v li c s thay i to ra chuyn ng.
C bn nht ca tng chnh l trng hp mt chiu, ging nh mt
chic xe di chuyn trn ng thng t A n B, ta c th phn hoch AB
ra n on [a
i
, a
i+i
] vi A = a
0
< a
1
< . . . < a
n
= B v gi s rng xe i
t A n B trong khong thi gian t bin thin [c, d] (gi s chuyn ng
l lin tc). Khi ta v hnh nh ca chic xe ti mi thi im t
i
tng
ng v tr a
i
ca chic xe. Dng mt vng lp lm ln lt cc cng vic
18
CHNG 2. V HNH NG TRONG MATLAB 19
1. V hnh nh chic xe ti ti im hin ti
2. Xa hnh v chic xe
3. Tng bin m i = i + 1
t
1
t
2
t
3
t
4
t
5
t
6 t
7
t
1
t
2
t
1
V
Xa
V
A B
a
1
a
2
a
3
a
4
a
5
a
6
a
7
Ta c th nhn thy l khi chia cng nh, th mt cch hin nhin
ta thng ngh l s chuyn ng s mt m hn. Tuy nhin, c th thm
cc lnh v Renderer
1
to s chuyn ng mt m hn, nhiu lc t
ra rt hiu qu.
2.1.2 Erase Mode
Vic xa khng c ngha l xa hon ton m c th l ta t mu i tng
cho ha hp vi mu nn, v ti mi bc ta c cch t mu khc nhau
to ra s chuyn ng.
Tng qut hn, mt hnh ng lm cho MATLAB v li mt i tng
khng ch c v v xa, m cn c th thay i thuc tnh ca i tng,
n trng ging nh ang c v li. T ta c th tn dng c im
ny to ra mt chui ng.
1
Xem 1.10
CHNG 2. V HNH NG TRONG MATLAB 20
Mt hnh thc c trng cho cch ny chnh l thay v v, xa v v li
i tng mi, ta thay i ta theo x, y, z mt lng nh nh cc
vng lp, hoc thay i gc nhn,. . .
Ta c th to ra cc hiu ng khc nhau nh cc cch xo hnh khc
nhau. Chng gm:
none MATLAB khng xo i tng khi n di chuyn
background MATLAB xo i tng bng cch v n c mu nn
xor MATLAB ch xo i tng
Tt c ba ch l nhanh hn (mc d t chnh xc hn) hn so vi ch
bnh thng mc nh ca MATLAB.
2.1.3 V d minh ha
Da trn t tng chic xe di chuyn trong 2.1.1, ta s thc hin n nh
sau
Code 1 (V v xa).
% To d liu
t = 0:0.001:1; % D liu v ti gian
x = 2*t; % D liu v v tr
% V hnh
figure(1); % Ch nh ca s ha v
set(gca,NextPlot,replacechildren) %%(1)
set(gcf,Renderer,OpenGL); %%(2)
hold on
plot(0,0,o,Markersize,5,MarkerFacecolor,black)% im A
plot(2,0,o,Markersize,5,MarkerFacecolor,black)% im B
axis([-0.5 2.5 -1 1]) % Gii hn trc ta
line([0 2] ,[0 0],color,black) % V on thng AB
% Bt u v bng vng lp
for i = 1:length(t)
h = plot(x(i),0,o,MarkerSize,20,MarkerFaceColor,b);
drawnow
delete(h) % Xa
end
hold off
Trong
CHNG 2. V HNH NG TRONG MATLAB 21
(1) L lnh ngn khng cho MATLAB a trc toa v normal axis
sau mi ln dng plot, trnh hnh nh chuyn ng b git (khng c
on code trn vn chy c)
(2) To ra s mt m cho chuyn ng (khng c on code trn vn
chy c)
2
Hnh 2.1: V v xa
Nhn vo on code trn, ta thy tng phng php mnh ha rt r
rng, ti mi ln lp, ta v xong v xa n ngay sau khi a ln mn hnh.
Nu khng c lnh xa ny, kt qu s thu c nh sau
Hnh 2.2: Hnh nh thu c khi khng c delete
2
Xem thm 1.10
CHNG 2. V HNH NG TRONG MATLAB 22
V khi bt hold on, tt c cc hnh v hin th ln mn hnh u c
gi li, nn khi b delete th ta s c vt di nh trn. Ch l khi dng
plot, nu khng c hold on, th sau mi ln ta dng plot th ca s
ha ch hin (cp nht) hnh nh mi nht v t ng xa cc hnh nh
c c dng plot. i khi c th tn dng iu ny thay v phi mt cng
thm vo dng delete. Nhng khi ta s mt i hnh nh on thng, 2
im u mt.
Hnh 2.3: Hnh nh thu c khi khng c delete v hold on
Tt nhin ta vn c th khc phc c bng cch v li ng thng
ngay ti mi ln dng plot trong vng lp, ch cn
for i = 1:length(t)
h = plot(x(i),0,o,MarkerSize,20,MarkerFaceColor,b);
line([0 2] ,[0 0],color,black)
drawnow
delete(h)
end
Nhng nh th tt nhin s lm cho my chy nng hn, i khi hnh v
hin th chm hn.
Ta tnh n phng php khc, cng dng tng v v xa, nhng
thay v delete, ta c th
T mu n bng mu nn coi nh xa Ta s t mu i
tng bng mu nn ( y ta do nn mc nh l mu trng) sau mi ln
drawnow
CHNG 2. V HNH NG TRONG MATLAB 23
for i = 1:length(t)
h = plot(x(i),0,o,MarkerSize,20,MarkerFaceColor,b)
drawnow
set(h,color,white,MarkerFaceColor,white)
line([0 2] ,[0 0],color,black)
end
Thay i ta ca i tng ta v n ln th nht, ri dng
vng lp thay i ta ca n, to ra s di chuyn. Vi cch ny ta khng
cn dng delete hay t mu nn g c, ta ch thay i ta ca n (
y l tnh tin).
Code 2.
% To d liu
t = 0:0.001:1; % D liu v ti gian
x = 2*t; % D liu v v tr
% V hnh
figure(1); % Ch nh ca s ha v
set(gca,NextPlot,replacechildren) %%(1)
set(gcf,Renderer,OpenGL); %%(2)
hold on
plot(0,0,o,Markersize,5,MarkerFacecolor,black) % im A
plot(2,0,o,Markersize,5,MarkerFacecolor,black) % im B
%%% V ln th nht
h = plot(x(1),0,o,MarkerSize,20,MarkerFaceColor,b);
set(h,EraseMode,normal); % Chn Erase Mode (*)
axis([-0.5 2.5 -1 1]) % Gii hn trc ta
line([0 2] ,[0 0],color,black) % V on thng AB
% Bt u v bng vng lp
for i = 1:length(t)
set(h,XData,x(i)) % Thay i ta
drawnow
delete(h) % Xa
end
hold off
Trong (*), Erase Mode y c tc dng nh to ra s mt m hn,
ty thuc vo mi ku xa. v d ny n gin nn b qua cng khng
nh hng g nhiu, nu ta thay bng background hoc xor, s thy s
khc bit do n xa lun ng thng AB, vi none th n s cho ra kt
CHNG 2. V HNH NG TRONG MATLAB 24
qu y nh hnh 2.2, c mt vt di v ging nh khi bt hold on, none
ch nh MATLAB khng xa i tng khi n duy chuyn.
Cn chung quy, on code trn cho ta rt qu rt mt, kh gn vi
nhng g thu c t code 1. (Hnh 2.1)
Cc v d tip theo da trn nguyn l ny c trnh by trong chng
3, ta s thng xuyn s dng 2 lnh sau (c th vi gi tr PropertyValue
khc) tng s mt m cho chuyn ng
set(gca,NextPlot,replacechildren)
set(gcf,Renderer,OpenGL);
CHNG 2. V HNH NG TRONG MATLAB 25
2.2 Phng php th hai
Trong phn ny, ta ni n cch v th nht to ra cc hnh ng.
Phng php ny da trn nguyn tc to v lu nhiu hnh (frame) ca
mt movie, sau ln lt hin th chng trn ca s hnh nh vi mt s
kim sot thi gian v fps sao cho hnh nh c mt m, hay gy ty
thuc vo mc ch yu cu.
Nhn xt Phng php ny s t ra hiu qu v tt hn phng php
th nht khi ta gp tnh hung mi khung hnh l kh phc tp v khng
th v li c mt cch nhanh chng. Ti mi bc, ta to ra cc khung
hnh (frame) trc, do thi gian v mt khung hnh khng nh hng
g n on movie ca ta. Movie to ra khng c trnh chiu theo gian
thc, n ch n gin l mt pht li cc khung hnh lu trc theo
th t.
2.2.1 Nguyn l ca phng php
Trn l thuyt ta thc hin hnh chuyn ng qua 3 bc:
1) To trc mt khng gian (c s c lng v di on movie)
ch nh computer dnh mt b nh nht nh cho on movie c
sinh ra. Vi movie c to t cc khung hnh (frame), ta dng hm
moviein dnh b nh lu mt ma trn ln nhm lu cc khung
hnh. Nhng thc t ta ch cn to mt ma trn l .
3
2) To cc khung hnh. Ta s dng hm getframe to cc khung hnh.
Chi tit v getframe xem 1.4
3) Dng hm movie hin th cc khung hnh.
Nhn xt V c bn, khi s dng phng php th nht, ta cng c th
cho vo movie nh phng php th hai nu ti mi ln redraw trong vng
lp, ta dng getframe. Nhng im khc bit ln nht ca gia hai phng
php chnh l nu lm theo kiu th nht th
drawnow khng cn cn thit vi cch th 2 v getframe ly c
khung hnh m khng cn v ln mn hnh
3
Chi tit v moviein xem 1.6. C th b lun moviein
CHNG 2. V HNH NG TRONG MATLAB 26
Khi cc hnh v kh phc tp v vic v li ngay tc thi gp nhiu
kh khn, phng php th nht s bc l yu im khi vic cp nht
ln mn hnh (drawnow) rt chm, gy git.
Trn l thuyt ca phng php th cc lnh
set(gca,NextPlot,replacechildren)
set(gcf,Renderer,PropertyValue)
lm mt m c th khng cn trong mt s trng hp
4
. Tuy nhin
vn cn rt cn thit khi gi li set(gca,NextPlot,replacechildren)
trong mt s trng hp trnh thay i trc ta lin tc. Hn
na t thc hnh cho thy khi dng set(gcf,Renderer,zbuffer)
cho on movie c cht lng kh tt.
Trong cch th hai ta c th iu khin s khung hnh iu khin tc
d dng hn. V quan trng nht, cch th hai cho php ta lu nh ng
thnh dng file .gif hoc thnh movie .avi. Chi tit hn c trnh by
trong chng 4
2.2.2 V d minh ha
Bt k mt hnh ng no c thc hin theo phng php trc u c
th thc hin li theo cch ny, di y ta s thc hin mt v d v m
hnh chic xe so snh vi phng php th nht.
Thc hin cc bc tng t, ch c thay i mt vi ch, c bit nu
y nh ni trn, vic dng set(gcf,Renderer,OpenGL) gy ra
li khng s dng li c on movie.
Kim tra 4 thuc tnh [ {painters} | zbuffer | OpenGL | None ] ca
Property Renderer ch c painters v zbuffer l s dng c. L do
ti sao nh vy th c l cn phi bit tht r cu trc bn trong ca cc
Property Renderer ny, iu ny nm ngoi khun kh bo co.
5
4
i khi cn phn tc dng.
5
OpenGL l mt th vin ha c pht trin h tr lp trnh ha, giao
din c lp vi phn cng kh ni ting theo chun cng nghip h tr ha 3D ca
hng Silicon Graphic, Inc. http://en.wikipedia.org/wiki/OpenGL
CHNG 2. V HNH NG TRONG MATLAB 27
Tng kt Khi lm nh ng vi phng php dng drawnow thun ty,
khng c movie th dng kt hp OpenGL l phng n cho kt qu rt
p. Cn nu dng movie th khng dng c OpenGL
Code 3.
clear all
% To d liu
t = 0:0.01:1; % D liu v ti gian
x = 2*t; % D liu v v tr
% V hnh
figure(1); % Ch nh ca s ha v
set(gca,NextPlot,replacechildren) %%(1)
set(gcf,Renderer,zbuffer); %%(2)
hold on
plot(0,0,o,Markersize,5,MarkerFacecolor,black) % im A
plot(2,0,o,Markersize,5,MarkerFacecolor,black) % im B
axis([-0.5 2.5 -1 1]) % Gii hn trc ta
line([0 2] ,[0 0],color,black) % V on thng AB
% Bt u v bng vng lp
lap = 1;
for i = 1:length(t)
h = plot(x(i),0,o,MarkerSize,20,MarkerFaceColor,b);
M(lap) = getframe; % Ly khung hnh
lap = lap+1;
delete(h) % Xa
end
hold off
movie(M,2); % Play movie 2 ln
Trong dng lnh trn, dng phng php movie ta c th iu khin
nhanh chm ca on movie, vi mt tc ra b hay chng mt m
chng cn chnh sa g ti vic phn hoch AB nh cch 1, tc khng cn
can thip vo b d liu, iu ny rt tin li khi m chia nh b d liu
th my cng chy chm, do khi lng tnh ton cng nhiu.
S dng lnh
movie(M,n,fps) %% V d movie(M,2,30)
CHNG 2. V HNH NG TRONG MATLAB 28
s cho ta iu khin tc khung hnh trn mt giy, trn ta chn 30
frame/s, tc kh mt. Nhng ch nh ni trong phn 1.5, kh
nng ca my tnh l c hn nn khng phi c tng cng nhiu fps l cng
nhanh, c mt lc ti ngng th c tng tc vn khng ln c.
Mt ch khc l sau mi ln chy, nu ta sa code th ch clear all,
v nu khng nhng ln chy sau d cho kt qu git v sai do nh hng
t movie trc chng ln (depend).
Chng 3
Cc v d dng v hnh ng
Trong chng ny ta s trnh by mt s v d p dng 2 cch trong chng
2. Mt cch rt n gin to ra cc hnh ng theo kiu quay, chnh
l p dng phng trnh ta ca php quay, xem 3.9, hoc c th lm
th cng theo t tng ta cc (xem 3.1 hoc 3.8). Ta ln lt xem cc
v d.
3.1 ng trn vi kim ng h
Dng phng php v v xa. Ta s v mt ng trn, vi mt ng knh
quay xung quanh tm 2 vng.
tng rt n gin, ta s s dng ta
cc biu th ng knh, v nh vy khi
thay i ta (cc) theo bin chy mt
lng nh t 0 2 ta thu c ng
knh xoay quanh tm ca ng trn.
Nh vy, cng vic u tin ta s v vng trn, k n l tham s ha
theo ta cc mt ng knh v cui cng dng vng lp thay i
thnh phn ng thi v n li v xa n trc khi sang bc lp k tip.
ca ng knh to ra s chuyn ng.
Code di y ta v vng trn ln hn mt cht so vi ng knh, ta
nh mt chic ng h. V c s dng cc lnh set to s mt m hn
cho chuyn ng.
29
CHNG 3. CC V D DNG V HNH NG 30
Code 3
r = 0:0.01:2; % ri rc bn knh
t = 0:pi/200:2*pi; % ri rc gc theta
[r,t] = meshgrid(r,t); % tng thm di, mn hn
x = 2.03*cos(t);
y = 2.03*sin(t);
h = plot(x,y,LineWidth,2,color,black); v ng trn
axis equal
set(gca,NextPlot,replacechildren)
set(gcf,Renderer,OpenGL);
set(gca,ytick,[]) % Xa trc Oy
set(gca,xtick,[]) % Xa trc Ox
theta = 0:pi/50:2*pi; % Lp gc quay
n = length(theta)
for i= 1:n
g = line([2*cos(theta(i)+pi) 2*cos(theta(i))],...
[2*sin(theta(i)+pi) 2*sin(theta(i))],...
color,r,LineWidth,3);
drawnow
pause(0.001) % gim tc quay li
if i<=n-1 % gi li ng knh khi quay xong
delete(g) % c th thay bng set(g,color,white)
end
end
Ta hon ton c th b i [r,t] = meshgrid(r,t) nhng khi s phi
tng chia ln tht ln. Khi ta chn mn hnh nn mu trng (hoc
mc nh th c th thay v delete(g), ta dng set(g,color,white)
nh ni trn. Do trn ta dng delete(g) sau mi ln drawnow nn
khi qu trnh quay kt thc vn cn li ng knh, th ti i = n tc
theta = 2 ta khng c xa delete(g), chnh l nguyn nhn xut
hin ca dng if i<= n-1 trn. Nu khng c th sau khi qu trnh quay
kt thc, ta ch cn mi ci ng trn.
CHNG 3. CC V D DNG V HNH NG 31
Trong dng c lnh line trong code trn, ta c th sa li thnh ch
v bn knh, khi trong kh ging vi ci ng h, phi hp thm lnh
pause to ra s chuyn ng nh mt ng h vi kim giy. Ch cn sa
li chu quay v chia ca theta, c th tng hoc gim pause sao cho
ph hp
Code 4 (M phng ng h n gin).
r = 0:0.01:2;
t = 0:pi/200:2*pi;
[r,t] = meshgrid(r,t);
x = 2.03*cos(t);
y = 2.03*sin(t);
h = plot(x,y,LineWidth,2,color,black);
axis equal
%set(gcf,DithermapMode,manual)
set(gca,NextPlot,replacechildren)
set(gcf,Renderer,OpenGL);
%%% Ve lan thu nhat
set(gca,ytick,[])
set(gca,xtick,[])
theta = pi/2:-pi/60:-2* pi + pi/2;
n = length(theta)
for i= 1:n
g = line([0 2*cos(theta(i))],...
[0 2*sin(theta(i))],color,r,LineWidth,3);
drawnow
pause(0.4)
if i<=n-1
delete(g)
end
end
CHNG 3. CC V D DNG V HNH NG 32
3.2 Mt chuyn ng n gin
Trong v d ny, ta s thit lp mt hnh ng v mt vt trn chuyn ng
trn mt ng cong 2D, v thay i bn kinh cng vi qu trnh chuyn
ng. C th ta chn qu o chuyn ng l th y = cos x, vi ng
trn c tm di chuyn trn th ny v bn knh ln lt thay i
Code 5 (Cch th nht).
clear all
clc
syms X Y t
dx = pi/50
x = -pi:dx:2*pi;
n = length(x);
x1 = -pi:dx:pi;
m = length(x1);
set(gca,NextPlot,replacechildren)
set(gcf,Renderer,OpenGL); %%%% Sa %%%%
axis([-4 8 -2 2])
hold on
k = plot(x,cos(x),black,LineWidth,2);
y = cos(x);
r = 0.3:-0.3/(m-1):0;
for i = 1:n-m+1
r(m+i) = r(m-i);
end
for i=1:length(x)
h = ezplot((X-x(i))^2 + (Y - y(i))^2 - r(i));
g = plot(x(i),cos(x(i)),o,color,black,...
MarkerFacecolor,black);
set(h,color,r,LineWidth,2)
drawnow
if i <= length(x) - 1
delete(h)
delete(g)
end
end
hold off
CHNG 3. CC V D DNG V HNH NG 33
Hnh 3.1: Hnh nh ng thu c
Khi ta thay delete bng cch i mu thnh mu nn (trng) th s
xy ra hin tng ng y = cos x b t mu trng ti mi khi bin ng
trn i qua. Nn phi v li sau ngay trong vng lp, d nhin s tn b
nh hn. Hoc khi khng cn v li, th tm ca ng trn cng to
ra mt ng y = cos x vi Marker dng o
Hnh 3.2: Khi khng c delete m thay bng t mu
V nu khng c c delete v t mu nn (bt hold on)
Hnh 3.3: Bt hold on v khng xa
CHNG 3. CC V D DNG V HNH NG 34
Cui cng, thit lp li theo cch th hai, ta ch cn sa vi ch
Code 6 (Cch th 2).
clear all
clc
syms X Y t
dx = pi/50
x = -pi:dx:2*pi;
n = length(x);
x1 = -pi:dx:pi;
m = length(x1);
set(gca,NextPlot,replacechildren)
set(gcf,Renderer,zbuffer); %%%% Sa %%%%
axis([-4 8 -2 2])
hold on
k = plot(x,cos(x),black,LineWidth,2);
y = cos(x);
r = 0.3:-0.3/(m-1):0;
for i = 1:n-m+1
r(m+i) = r(m-i);
end
for i=1:length(x)
h = ezplot((X-x(i))^2 + (Y - y(i))^2 - r(i));
g = plot(x(i),cos(x(i)),o,color,black,...
MarkerFacecolor,black);
set(h,color,b,LineWidth,2)
M(i) = getframe;
% if i <= length(x) - 1
% delete(h)
% delete(g)
% end
end
hold off
movie(M,2,24)
Sau dng movie(M,2,24) hoc movie(M,2,30) cho hnh nh kh
mt.
CHNG 3. CC V D DNG V HNH NG 35
3.3 Mt astroid quay trong khng gian 3
chiu
ng cong hnh sao (astroid) l ng cong c phng trnh xc nh bi
x
2
3
+ y
2
3
= 2
2
3
dng ng n vo khng gian 3 chiu, ta tham s ha li thnh
y
2
3
+ z
2
3
= 2
2
3
, x = 0
t = 0:pi/100:2*pi;
n = length(t);
x = 2.*cos(t).^3;
y = 2*sin(t).^3;
plot(x,y,black)
grid on
fill(x,y,b)
t = 0:pi/100:2*pi;
n = length(t);
y = 2.*cos(t).^3;
x = 0.*y;
z = 2*sin(t).^3;
hold on
plot3(x,y,z,black)
fill3(x,y,z,b)
grid on
%% V mt z = 0
[X,Y] = meshgrid(-2:0.2:2);
Z = 0*X + 0*Y;
plot3(X,Y,Z,black)
[M,N] = meshgrid(2:-0.2:-2);
P = 0*M + 0*N;
plot3(N,M,P,black)
hold off
CHNG 3. CC V D DNG V HNH NG 36
tng ca ta l lm hnh ny chuyn ng quay 360

theo trc Oz,


vi cch nhn , ta dng ta cc th vic din ta s quay rt d dng
vi tham s . Nh vy cch v astroid3D ni trn l khng dng c, s
dng tng t bi ton m phng ng h, ta ch vic hnh dung nh
mt on thng d trong mt phng xOy, quay quanh trc Oz, vi mi v
tr ca d, ta v mt astroid trn on thng , th khi cho bin thin t
0 2, on thng d quay ko theo mt quay. y cng l tng c
bn v chung nht cho cc bi ton biu din hnh quay.
tin li hn, ta s vit mt hm astroidpolar(theta) c i s
chnh l gc hp bi ng d (giao mt phng z = 0 v mt astroid).
Hm ny s v mt astroid xoay mt gc so vi mt phng x = 0
Code 7 (function astroidpolar(theta)).
function astroidpolar(theta)
r = -2:0.001:2;
x = r.*cos(theta); % V on thng [-2, 2] theo gc theta
y = r.*sin(theta);
z = ((2^(2/3) - (r.^2).^(1/3)).^3).^(1/2); % V phn z > 0
n = length(r);
for i = 1:n-1
x(n+i) = x(n-i);
y(n+i) = y(n-i);
z(n+i) = -z(n-i); % V phn z < 0
end
plot3(x,y,z,black)
grid on
fill3(x,y,z,b)
axis([-2 2 -2 2 -2 2])
V gi ta ch cn cho bin thin, ta c on code
Code 8 (Quay astroid).
CHNG 3. CC V D DNG V HNH NG 37
theta = 0:pi/50:2*pi;
k = cos(phi);
n = length(k);
set(gca, NextPlot,replacechildren)
set(gcf,Renderer,OpenGL);
axis([-2 2 -2 2 -2 2])
zlabel(Oz)
ylabel(Oy)
xlabel(Ox)
lap = 1;
set(gca,PlotBoxAspectRatio,[1 1 1])
for i = 1:n
astroidpolar((theta(i)))
grid on
view(3)
drawnow
end
V ta thu c dy cc hnh nh
Hnh 3.4: Mt astroid quay
dng movie, ta sa vi ch nh
Code 9 (Quay astroid vi movie).
CHNG 3. CC V D DNG V HNH NG 38
theta = 0:pi/50:2*pi;
k = cos(theta);
n = length(k);
set(gca, NextPlot, replacechildren)
set(gcf,Renderer,painters);%%% zbuffer khng tt vi TH ny
axis([-2 2 -2 2 -2 2])
zlabel(Oz)
ylabel(Oy)
xlabel(Ox)
lap = 1;
set(gca,PlotBoxAspectRatio,[1 1 1])
for i = 1:n
phitieupolar((theta(i)))
grid on
view(3)
M(lap) = getframe;
lap = lap + 1;
end
movie(M,3,24)
Khi ny cht lng on movie kh cao, rt mt vi fps = 24, c th
tng thm thnh 30 cng mt hn. Lu nh ni phn nguyn l,
PropertyValue OpenGL khng hot ng tt vi movie, ch c painters
v zbuffer hot ng, th chn tng thuc tnh cho kt qu tt nht.
M rng Khi ta thm vo hm astroidpolar(theta) on code v mt
phng z = 0
%% V mt z = 0
[X,Y] = meshgrid(-2:0.2:2);
Z = 0*X + 0*Y;
plot3(X,Y,Z,black)
[M,N] = meshgrid(2:-0.2:-2);
P = 0*M + 0*N;
plot3(N,M,P,black)
th khi v vi drawnow, nu khng dng OpenGL th tc quay l cc
k chm, tht ch git. Nhng nu b OpenGL vo th khng dng c
movie. Tm chp nhn gii php dng painters hoc zbuffer, vi tc
ln quay u tin l kh chm, nhng sau dng movie vi ty chnh fps
CHNG 3. CC V D DNG V HNH NG 39
cho cht lng kh n. iu ny cng xy ra khi ta bt hold on, cho thy
vi cc hnh v phc tp, tn nhiu b nh th dng drawnow khng phi
l mt gii php tt.
Code 10 (Hm astroidpolar2 c mt phng z = 0).
function astroidpolar2(theta)
r = -2:0.001:2;
x = r.*cos(theta);
y = r.*sin(theta);
z = ((2^(2/3) - (r.^2).^(1/3)).^3).^(1/2);
n = length(r);
for i = 1:n-1
x(n+i) = x(n-i);
y(n+i) = y(n-i);
z(n+i) = -z(n-i);
end
plot3(x,y,z,black)
grid on
fill3(x,y,z,b)
axis([-2 2 -2 2 -2 2])
%%%%% Ve mat phang z = 0 %%%%%%
hold on
[X,Y] = meshgrid(-2:0.2:2);
Z = 0*X + 0*Y;
plot3(X,Y,Z,black)
[M,N] = meshgrid(2:-0.2:-2);
P = 0*M + 0*N;
plot3(N,M,P,black)
hold off
Code 11 (astroid3D quay c thm mt phng z = 0).
CHNG 3. CC V D DNG V HNH NG 40
theta = 0:pi/50:2*pi;
k = cos(theta);
n = length(k);
set(gca, NextPlot, replacechildren)
set(gcf,Renderer,OpenGL);
axis([-2 2 -2 2 -2 2])
lap = 1;
for i = 1:n
phitieupolar((theta(i)))
grid on
view(3)
drawnow
end
Hnh 3.5: Mt astroid quay c mt phng z = 0
3.4 Cc phng trnh sng
Trong v d ny, ta s v phng trnh sng n gin c dng
Hnh 3.6: Sng n gin
CHNG 3. CC V D DNG V HNH NG 41
v c, ta coi y l th ca hm y theo bin thi gian t. Ti
mi thi im, ta cn bit ta ca nh sng, cng nh xc nh t u
khng cch gia 2 chn sng. Tham s ha chng bng ta , c th xt
trn trc ta Ox ta t nh sau
3.4.1 V vi hm sin
Hnh 3.7: Mt frame ca sng
Trn on [c d, c +d] ta cn v mt nhp sng, cn li nm ngoi on
ny th tung y bng 0. Nhp sng trn on [c d, c +d] ny l nh ca
mt hm dng sin hoc ging hn, dng dng hm gauss. Nh vy cn
c mt song nh t [0, ] vo [c d, c + d] nu nh dng hm sin do mt
nhp sng nh trn c dng ta th hm sin trn [0, ]
Chn hm y vi y = sin

tc+d
2d

, khi x [c d, c + d] ta c c y c
dng nhp sng nh trn khi x [c d, c + d], vn tp theo l x l cc
on ngoi.
Hnh 3.8: nh mt nhp sng trn [c d, c + d]
CHNG 3. CC V D DNG V HNH NG 42
Phn tch Ta s v sng trn on [0,1]. Nh vy 0 v 1 l hai u mt
ca sng. Vi mt gi tr c trong [0,1], ta s v c mt frame c dng
nh mt nhp sng hnh 3.9.
Khi frame l th {t, y(t)} vi t = 0 1.
Khi c chm ti u mt 1 th di li v hin th phn m. Khi ny ta
tng tng nh c bin thin t 1 0, v tt nhin, t cng bin thin t
1 0 (chuyn ng ngc)
T , code c bn nht ca hnh v c xy dng nh sau (ta s tip
tc chnh sa cho hon thin)
Code 12 (Code demo).
clear all
axis([0 1 -1 1])
set(gca,NextPlot,replacechildren)
set(gcf,Renderer,zbuffer);
clear all
dt = 0.001;
d = 0.1;
g = @(t,c,d) ((t>=c-d) & (t<=c+d)) & (c-d >= 0) & (c+d <= 1);
f = @(t,c,d) g(t,c,d).*sin((t - c+d)./(2*d)*pi);
t1 = 0:dt:1;
lap = 1;
for c = 0:0.02:1
y = f(t1,c,d);
plot(t1,y,LineWidth,2)
pause(0.05);
M(lap) = getframe;
lap = lap + 1;
end
t2 = 1:-dt:0;
for c = 1:-0.02:0
y = -f(t2,c,d);
plot(t2,y,LineWidth,2)
pause(0.05);
M(lap) = getframe;
lap = lap + 1;
end
movie(M,2,30)
CHNG 3. CC V D DNG V HNH NG 43
Hnh 3.9: nh t code 12
Nhn xt rng code trn to ra hnh v thiu mt phn phn x ti hai
mt. Ta s sa li code trn
1. Thay v chy 2 vng lp, ta cho lun c bn thin t 0 n 2, v lp
trnh li khi c trong [0, 1] th ch c phn dng c v, phn m
f(t2,c,d) = 0. V hn na d c chy trn (1,2) nhng khi x l vn
a c v c [0, 1] do ta chn v sng trn [0,1]. Thay v chy 2
vng lp vi 2 b gi tr y1 = f(t1),y2 = f(t2), ta v chng ngay
trong mt vng lp vi y = y1 + y2, vi ci t sao cho y1 > 0 v
y2 < 0 Khi cn thay i t chy trong [0,2] v xc nh thm hm
k = @(t) -(t~=1).*(t~=0).*(t~=2).*(2*(t>1)-1);
ngha hm ny l ti t = 0,1,2 th k(t) = 0, ngoi ra trn (0, 1)
th k(t) = 1 , trn [1, 2] th k(t) = 1 lm y2 m.
2. Sa li hm g trong code 12, tn dng c khi c gn 2 mt, th
gi tr ca hm trn phn dng v phn m cng li vi nhau s trit
tiu dn dn, ch khng bng 0 t ngt, to nn hiu ng phn x.
g = @(t,c,d) abs(mod(t-c,2)-1) >= (1-d)
Trn c s , ta c code hon chnh sau y
Code 13 (Code Final).
CHNG 3. CC V D DNG V HNH NG 44
clear all
axis([0 1 -1 1])
set(gca,NextPlot,replacechildren)
set(gcf,Renderer,zbuffer);
clear all
dt = 0.001;
d = 0.1;
k = @(t) -(t~=1).*(t~=0).*(t~=2).*(2*(t>1)-1);
h = @(t) (mod(t,2)<=1).*mod(t,2) + (mod(t,2)>1).*(mod(t,2)-2);
% Khi 0<t<1 th h = t, Khi 1 < t < 2 th h = t-2
% Hm ny dng chuyn v (0,1) khi c, t chy trn (1,2)
g = @(t,c,d) abs(mod(t-c,2)-1) >= (1-d)
f = @(t,c,d) k(t).*g(t,c,d).*sin(h(t - c+d)./(2*d)*pi);
t1 = 0:dt:1; t2 = 2:-dt:1;
lap = 1;
for c = 0:0.02:2
y = f(t1,c,d) + f(t2,c,d);
plot(t1,y,LineWidth,2)
pause(0.05);
M(lap) = getframe;
lap = lap + 1;
end
movie(M,2,30)
V ta thu c dng sn sin c hiu ng phn x
Hnh 3.10: nh t code 13
CHNG 3. CC V D DNG V HNH NG 45
3.4.2 V vi hm gauss
Thc hin mt cch tng t, ta ch thay bng hm gauss v ch khi ny
hm gauss mang lun thng s xc nh c, d nh trn, ta b i hm g.
Cng thc ca hm Gauss
f = e
K(xS)
2
Sa li theo on [0,1] vi cc gi tr c, d ta c
Code 14 (Gauss).
clear all
axis([0 1 -1 1])
set(gca,NextPlot,replacechildren)
set(gcf,Renderer,zbuffer);
clear all
dt = 0.001;
d = 0.1;
k = @(t) -(t~=1).*(t~=0).*(t~=2).*(2*(t>1)-1);
h = @(t) (mod(t,2)<=1).*mod(t,2) + (mod(t,2)>1).*(mod(t,2)-2);
% Khi 0<t<1 th h = t, Khi 1 < t < 2 th h = t-2
% Hm ny dng chuyn v (0,1) khi c, t chy trn (1,2)
g = @(t,c,d) abs(mod(t-c,2)-1) >= (1-d)
f = @(t,c,d) k(t).*exp( -h(t-c).^2/(2*d^2) );
t1 = 0:dt:1; t2 = 2:-dt:1;
lap = 1;
for c = 0:0.02:2
y = f(t1,c,d) + f(t2,c,d);
plot(t1,y,LineWidth,2)
pause(0.05);
M(lap) = getframe;
lap = lap + 1;
end
movie(M,2,30)
CHNG 3. CC V D DNG V HNH NG 46
3.4.3 M rng sng gauss
M rng t dng sng gauss ni trn, ta c th thm vo mt sng na
lnh pha so vi sng ban u
Hnh 3.11: Do ng ca 2 sng lch 0.5 (code 15)
Code 15 (Hai sng Gauss lnh 0.5).
clear all
set(gca,NextPlot,replacechildren);
set(gcf,Renderer,zbuffer);
axis([0 1 -2 2])
dt = 0.01;
d = 0.1;
k = @(t) -(t~=1).*(t~=0).*(t~=2).*(2*(t>1)-1);
g = @(t,c,d) ((t>=c-d) & (t<=c+d));
h = @(t) (mod(t,2)<=1).*mod(t,2) + (mod(t,2)>1).*(mod(t,2)-2);
f = @(t,c,d) k(t).*exp( -h(t-c).^2/(2*d^2) );
f2 = @(t,c,d) k(t).*exp( -h(t-c - 0.5).^2/(2*d^2) );
t1 = 0:dt:1; t2 = 2:-dt:1;
lap = 1;
hold on
for c = 0:0.02:2
y = f(t1,c,d)+f(t2,c,d);
y2 = f2(t1,c,d)+f2(t2,c,d);
a = plot(t1,y,r,LineWidth,2)
b = plot(t1,y2,b,LineWidth,2);
drawnow
pause(0.05);
M(lap) = getframe;
CHNG 3. CC V D DNG V HNH NG 47
if c < 2
delete(a);
delete(b);
end
lap = lap + 1;
end
hold off
movie(M,1,12)
Hoc chn lnh ca 2 sng t hn, ta s c c cc dng sng nh
mun
Hnh 3.12: Do ng ca 2 sng vi lch 0.1
CHNG 3. CC V D DNG V HNH NG 48
3.4.4 Mt v d khc v phng trnh sng
Ta s thc hin m phng dng sng hay gp trong cc my o tn hiu.
Xt hm y = f(x) = x cos x, c th c cho bn di
10 8 6 4 2 2 4 6 8
10
8
6
4
2
2
4
6
8
0
Hnh 3.13: th hm y = x cos x
T th ny, ta thy ch cn thay i x mt lng nh v gii hn
x > 0, th s to ra nhng ng chuyn ng nh dn t phi v tri
(ngc chiu trc Ox). T dng phng php th nht (hnh v ny
kh n gin), ta c on code sau
Hnh 3.14: Gii hn x > 0
CHNG 3. CC V D DNG V HNH NG 49
Code 16.
clear all
set(gca,NextPlot,replacechildren);
set(gcf,Renderer,zbuffer);
x = 0:pi/100:8*pi;
lap = 1;
for i=1:200
y=(x).*cos(x+0.1*pi*i);
plot(x,y);
axis([0 25 -25 25]);
%drawnow
pause(0.01);
M(lap) = getframe;
lap = lap + 1;
end
movie(M,2,30)
Dng sng thu c c tnh tun hon
Hnh 3.15: nh t code 16
C th sa mt cht, ta thm vo mt sng dng sin na
Hnh 3.16: nh t code 17
CHNG 3. CC V D DNG V HNH NG 50
Khi ny ta cn bt hold on v dng phng php v, xa do c ti 2
lnh plot
Code 17.
clear all
axis([0 25 -25 25]);
set(gca,NextPlot,replacechildren);
set(gcf,Renderer,zbuffer);
x = 0:pi/100:8*pi;
lap = 1;
hold on
line([0 25], [0 0],color,black)
for i=1:200
y = (x).*cos(x+0.1*pi*i);
z = (x).*sin(x+0.1*pi*i);
h = plot(x,y);
g = plot(x,z,r);
pause(0.08);
M(lap) = getframe;
delete(h)
delete(g)
lap = lap + 1;
end
hold off
movie(M,2,24)
CHNG 3. CC V D DNG V HNH NG 51
3.5 Dao ng l xo
Trong v d ny, ta s v dao ng ca mt chic l xo treo mt vt nng
thng ng.
T kt qu l thuyt vt l, ta bit rng dao ng ca l xo c dng
x = Asin(t + )
Trong x l ta , t l thi gian.
Nh vy, trc ht cho mt vt c khi lng, ta ch cn v n bng
cch cho thi gian t thay i trong phng trnh trn, ta s thu c dao
ng. Tm thi xem l xo nh mt si dy "n hi" c v bng lnh
line, ta dng bng phng php v v xa
Code 18 (Dao ng vi dy n hi).
x = -pi:pi/100:pi;
n = length(x);
set(gca,NextPlot,replacechildren)
set(gcf,Renderer,OpenGL);
axis([-4 4 -2 2])
w = 2*pi/3;
for i = 1:1:n
y = 2*sin(w*x(i));
h = plot(0,y,o,Markersize,20,MarkerEdgecolor,...
black,MarkerFacecolor,b);
g = line([0 0],[2 y]); %%% dng ny cn thay
set(g,LineWidth,2,MarkerEdgecolor,black,...
Markersize,20,color,black)
drawnow
if i<=n-1
delete(g)
end
end
CHNG 3. CC V D DNG V HNH NG 52
Gi ta ch cn v l xo ni gia 2 im A, B cho trc, ch l s nhp
ca l xo phi c nh. Truyn vo n l s nhp, trc ht ta chia AB ra n
on thng bng nhau, ri y trung im ca on gn A nht dng tam
gic vung cn, ly nh tam gic ny lm gc nhp l xo th nht, ln lt
ly i xng qua cc im chia ta thu c dng ta l xo.
Code 19 (Hm m phng l xo).
function spring = spring(X,Y,n)
% X, Y are two vector, each of them have exactly 2-element
% xA = X(1); yA = Y(1)
% xB = X(2); yB = Y(2)
% in 2D plane
% spring plot a spring from point A(xA,yA) to point B(xB,yB)
% Syntax : spring(xA,xB,yA,yB,n)
% n is the number of spring segment
% Example: Plot a spring from A(0,0) to B(2,2), with n = 8
% spring([0 2],[0 2], 8)
xA = X(1); yA = Y(1);
xB = X(2); yB = Y(2);
dx = (xB - xA)/n;
dy = (yB - yA)/n;
X(1) = xA;
Y(1) = yA;
for i = 2:n+1
X(i) = X(i-1) + dx;
Y(i) = Y(i-1) + dy;
end
P(1) = xA;
Q(1) = yA;
xM = (X(1)+X(2))/2;
yM = (Y(1)+Y(2))/2;
P(2) = xM - dy/(0.2*n);
Q(2) = yM + dx/(0.2*n);
for i = 2:n
P(i+1) = 2*X(i) - P(i);
Q(i+1) = 2*Y(i) - Q(i);
end
P(n+2) = xB;
Q(n+2) = yB;
spring = line(P,Q);
CHNG 3. CC V D DNG V HNH NG 53
Trn y ta thc hin n ring thnh mt hm spring v ch cn
thay dng line trong code 18 thnh spring l c.
Code 20 (Dao ng l xo).
x = -pi:pi/100:pi;
n = length(x);
set(gca,NextPlot,replacechildren)
set(gcf,Renderer,OpenGL);
axis([-4 4 -2 2])
w = 2*pi/3;
for i = 1:1:n
y = 2*sin(w*x(i));
h = plot(0,y,o,Markersize,20,MarkerEdgecolor,...
black,MarkerFacecolor,b);
g = spring([0 0] ,[2 y],10);
set(g,LineWidth,2,MarkerEdgecolor,black,...
Markersize,20,color,black)
drawnow
if i<=n-1
delete(g)
end
end
3.6 Mt sng 3D
Trong v d ny, ta s v chuyn ng dng ln sng ca mt mt trong
khng gian 3 chiu c phng trnh c dng gn gn
z = f(x, y) = cos y + sin x, x, y [0, 2]
Ty chnh surf(x,y,z,LineStyle,none) cho kt qu p mt hn
CHNG 3. CC V D DNG V HNH NG 54
S dng phng php th nht vi tng v, xa, ta s ln lt v li
mt z vi cc gi tr x, y thay i nh, ng thi a lun movie vo
Code 21 (Mt ln sng).
clear all
x = -pi:0.1:pi;
view(3); % chn gc nhn 3 chiu
n = length(x);
y = 1:n;
[x,y] = meshgrid(x,y);
Y = y/n*pi;
z = cos(Y) + sin(x);
%h = surf(x,y,z)
set(gca,NextPlot,replacechildren)
set(gcf,Renderer,zbuffer); %% do dng movie
hold on
axis([-5 5 0 80 -2 2])
set(gca,xtick,[]);
set(gca,ytick,[]);
set(gca,ztick,[]);
lap = 1;
for j = 1:0.1:10
z = cos(Y+j) + sin(x+j);
h = surf(x,y,z,LineStyle, none);
M(lap) = getframe;
lap = lap + 1;
%drawnow %% Nu dng theo cch th nht
delete(h);
end
hold off
movie(M,2,30); % chn fps = 30
CHNG 3. CC V D DNG V HNH NG 55
Chuyn ng thu c rt mt m v uyn chuyn, c phn mt m
nh sng bin hoc l c bay trong gi
Hnh 3.17: Chuyn ng ca mt z
3.7 Mt besselj
Mt v d khc v mt 3D c to bi hm besselj c dng nh bng
hoa chuyn ng
Hnh 3.18: Mt besselj
CHNG 3. CC V D DNG V HNH NG 56
Code 22 (besselj).
clear all
[x,y] = meshgrid([-10:0.5:10]);
set(gca,NextPlot,replacechildren)
set(gcf,Renderer,zbuffer);
for j = 1:1:300
z = besselj(0, (j-1)*0.2 + sqrt(x.^2 +y.^2));
surf(x,y,z) % c th chnh LineStyle cho p
drawnow
axis([-10 10 -10 10 -.5 1])
M(j) = getframe;
end
movie(M,2)
3.8 Hnh m dng quay
Trong v d ny, ta s thc hin hnh
m dng quay ngc chiu kim
ng h. C th coi l mt hnh
trn tm O, bn knh 2, v 2 ng
trn nh hn bn knh 1 vi tm ln
lt l (1,0) v (-1,0) i xng nhau
qua tm O. Sau ta s t mu cho
ph hp c hnh m dng
Hnh m dng trn y, khi ni 2 chm trn i ngang qua gc O v hp
Ox mt gc = 0

. S dng ta cc, ta s tch ra thnh 2 phn, u


tin l v mt hm myamduong(theta,color) chuyn dng v mt hnh m
dng hp vi Ox gc theta, c mu color. Sau khi ta cho theta chy
t 0 n 2, ln lt v bng cch gi hm myamduong(theta,black)
ti mi thi im ca theta v xa n, ta thu c hnh nh chuyn ng
ca m dng ngc chiu kiem ng h. Tt nhin cn phi ci t hm
sao cho hng m dng l ngc chiu kim ng h.
CHNG 3. CC V D DNG V HNH NG 57
Code 23 (Hm myamduong(theta,color)).
function myhand = myamduong(theta,color)
% This function return a amduong figure has rotate
% an angle theta by Ox
% Chieu xoay nguoc chieu kim dong ho
% Oriented counter-clockwise
% Cai dat do chia theo t -- goc quay
dt = pi/500;
% Tam duong tron ben phai - mau den
xo = cos(theta);
yo = sin(theta);
% Bat dau qua trinh ve, xay dung cac cung trong
hold on
% Ve nua duong tron theo xo,yo - mau den dinh huong duong
t1 = theta:dt:theta + pi;
X1 = cos(t1) + xo;
Y1 = sin(t1) + yo;
% Ve nua duong tron theo -xo,-yo - mau trang dinh huong am
t2 = theta:-dt:theta - pi;
X2 = cos(t2) - xo;
Y2 = sin(t2) - yo;
% Ve nua duong tron bao ben ngoai phan mau den
t3 = -pi+theta:dt:theta;
X3 = 2*cos(t3);
Y3 = 2*sin(t3);
% Tao bo du lieu X,Y luu cung mau den
X = [X1 X2 X3];
Y = [Y1 Y2 Y3];
% To mau phan mau den
myhand(1) = fill(X,Y,color);
% Ve 2 cham tron (xo,yo) v (-xo,-yo)
myhand(2) = plot(xo,yo,o,MarkerEdgecolor,black,...
MarkerFacecolor,white,Markersize,20);
myhand(3) = plot(-xo,-yo,o,MarkerEdgecolor,black,...
MarkerFacecolor,color,Markersize,20);
hold off
end
CHNG 3. CC V D DNG V HNH NG 58
Code 24 (Script file quay amduong).
clear all
qq = figure(1);
set(qq,color,w)
axis([-2 2 -2 2]);
axis off
set(gca,PlotBoxAspectRatio,[1 1 1]);
set(gca,NextPlot,replacechildren);
set(gcf,Renderer,zbuffer); %set(gcf,Renderer,OpenGL);
view(2)
hold on
dt = pi/100;
theta = 0:dt:2*pi;
length_theta = length(theta);
x = 2*cos(theta);
y = 2*sin(theta);
plot(x,y,k);
for i = 1:length_theta
h = myamduong(theta(i),k);
drawnow
M(i) = getframe;
if i <= length_theta - 1
delete(h)
end
end
hold off
movie(M,10,100)
CHNG 3. CC V D DNG V HNH NG 59
3.9 Astroid quay trong mt phng 2 chiu
Trong v d ny, ta s tip ni v mt
astroid trong 3.3. T mt astroid2D
trong 3.3, gi ta s quay n quanh
tm (0,0) bng cch n gin nht,
s dng cng thc ta ca php
quay quanh gc O(0,0).
Gi (x, y) l ta ca im P v (x

, y

) l ta P

nh ca P qua
php quay tm O gc , ta c cng thc lin h sau gia x, y v x

, y

,
vi l gc hp bi vector OP vi trc Ox (ging nh ta cc), t
OP = r > 0

r
P

P
C
D
E F

x = r cos
y = r sin

= r cos( + )
y

= r sin( + )

= x cos y sin
y

= x sin + y cos
Cng thc ta ca php quay ni trn cho php ta n gin ha
tt c mi hnh v 2D quay quanh gc O(0,0). Tht vy, ch cn v tnh 1
trng hp ca n, v dng cng thc ni trn, sau cho chy t 0 n
2 hoc nhiu hn ty , thc hin v, xa ta c c chuyn ng quay
cn to. Ta s p dng cho hnh astroid 2D i y. Trc ht ta thc
hin hm v mt astroid quay mt gc so vi Ox, ch ta cn thit lp
sao cho hm tr v cc bin handle qun l (xa, t mu) v sau
Code 25 (astroid2D).
function myhand = astroid2D(theta,color)
hold on
CHNG 3. CC V D DNG V HNH NG 60
dt = pi/100;
t = theta:dt:2*pi + theta;
x = 2*cos(t).^3;
y = 2*sin(t).^3;
X = x.*cos(theta) - y.*sin(theta);
Y = x.*sin(theta) + y.*cos(theta);
myhand(1) = plot(X,Y,color);
myhand(2) = fill(X,Y,color);
hold off
end
Gi ta ch cn cho gi hm astroid2D v ti mi thi im gi truyn vo
hm gc khc nhau, c th to thm hiu ng i mu cho p nu mun
Code 26 (astroid2Dquay).
clear all
axis([-2 2 -2 2]);
set(gca,xtick,[]);
set(gca,ytick,[]);
set(gca,PlotBoxAspectRatio,[1 1 1]);
set(gca,NextPlot,replacechildren);
%set(gcf,Renderer,zbuffer);
set(gcf,Renderer,OpenGL);
dtt = pi/100;
theta = 0:dtt:8*pi;
n = length(theta);
hold on
x = 2*cos(theta); y = 2*sin(theta);
plot(x,y,ok);
plot(0,0,o,MarkerFacecolor,w,MarkerEdgecolor,w)
for i = 1:n
if i <= n/4
color = red;
elseif (n/4 <= i) & i <= n/2
color = g;
elseif n/2 <= i & i <= 3*n/4
color = b;
else
color = k;
end
CHNG 3. CC V D DNG V HNH NG 61
h = astroid2D(theta(i),color);
drawnow;
%M(i) = getframe;
if i <= n-1
delete(h)
end
end
hold off
%movie(M,2,24)
Code trn dy dng drawnow, vic sa li thnh movie ch cn bt cc
dng % v xa dng ...OpenGL. Ta c chuyn ng nh hnh di y
3.10 M phng con lc n
Tip ni phn con lc l xo, ta s m phng chun ng con lc n (treo
bng dy khng n hi vi mt vt nng) Ta cn to mt chuyn ng
ng theo vt l, chuyn ng ny l iu ha v tt dn, ta cn c s l
thuyt sau y
Hnh 3.19: M hnh con lc n
Gi l tc gc, =

g
l
vi g
2
(m/s
2
) l gia tc trng trng.
l l chiu di on dy treo con lc, ly l = 1(m). Ta xt v tr ca con lc
CHNG 3. CC V D DNG V HNH NG 62
ti thi im t ng vi gc hp bi dy treo v phng thng ng, chiu
dng v bn tay phi. Khi chu k dao ng ca con lc l
T =
2

(s)
Phng trnh dao ng ca con lc theo li gc c dng
1
=
0
cos(t)
Trong
0
l bin ca dao ng, chn
0
=

6
.
chuyn ng tt dn, ta s gim bin dn dn sau mi chu k
chuyn ng.
Trn c s , ta cng s vit mt hm conlacdon(theta,color) lm
nhim v v con lc n vi li gc theta v mu color. Sau vo
script file cho theta bin thin cng vi iu khin bin theo l thuyt
trn y ta c c m phng hon chnh
Code 27 (Hm conlacdon(theta,color)).
function myhand = conlacdon(theta,color)
% This function return a pendulum with angle
% by vertical is theta
% Ve soi day tu diem (0,0) den chieu dung la (0,-2)
r = 2;
hold on
y = (-1)*abs(2*cos(theta));
if theta >= 0
x = abs(r*sin(theta));
else
x = -abs(r*sin(theta));
end
myhand(1) = line([0,x],[0,y]);
set(myhand(1),color,k);
myhand(2) = plot(x,y,o,MarkerEdgecolor,...
color,MarkerFacecolor,color,Markersize,20);
hold off
end
Code 28 (M phng con lc n - Script file).
1
y l =
0
cos(t + ), nhng n gin ta cho = 0 l pha ban u
CHNG 3. CC V D DNG V HNH NG 63
clear all
set(gcf,color,w)
hold on
axis off % Khng hin th cc trc ta
% V gc treo dy
plot(0,0,o,MarkerEdgecolor,k,...
MarkerFacecolor,k,Markersize,10);
k = line([0,0],[-2, 0]);
set(k,LineStyle,--,color,black);
axis([-1.5 1.5 -2.5 0.1]);
set(gca,PlotBoxAspectRatio,[1 1 1]);
set(gca,NextPlot,replacechildren);
%set(gcf,Renderer,zbuffer); % lm movie
set(gcf,Renderer,OpenGL);
dt = pi/50; % Khi to gi tr cho theta
% Chn theta0 ban u = pi/6
% Tc gc w = sqrt(g/l) = pi
% theta = theta0*cos(w*t)
theta0 = pi/6;
w = pi;
% Tnh chu k u tin
T = 2*pi/w;
time = 0:dt:T; % Khi to gi tr thi gian theo chu k
%lap = 1;
while theta0 >= 0.01
% Ve chu ki
theta = theta0*cos(w*time);
n = length(theta);
for i = 1:n %%%%%%%%%%%%%%%%%%%%%%
if i<= n-2 %%%%%%%%%%%%%%%%%%%%%%
h = conlacdon(theta(i),b);
%M(lap) = getframe;
drawnow
pause(0.05)
delete(h);
%lap = lap + 1; %%%%%%%%%%%%%%%%%%%%%%
end %%%%%%%%%%%%%%%%%%%%%%
end
theta0 = theta0*0.9; % Gim bin
end
% V con lc n cui cng ti v tr cn bng
conlacdon(0,b);
hold off
% movie(M,2,24)
CHNG 3. CC V D DNG V HNH NG 64
V m phng nhn c kh tt
Hnh 3.20: M phng con lc n tt dn
Ta c th chnh li code trn dnh du s gim dn li gc cao
nht ca con lc, ch cn sa on gia 2 dng % . . . % trn thnh
Code 29 (Lu hnh nh gim dn bin ).
for i = 1:n
if i<= n-2
h = conlacdon(theta(i),b);
%M(lap) = getframe;
drawnow
pause(0.05)
if i<= n-3
delete(h);
end
%lap = lap + 1;
end
end
V kt qu s l
Hnh 3.21: Bin con lc gim dn
Chng 4
nh v movie trong matlab
Trong phn ny ta ni v cch lu chuyn ng thnh nh .gif v phim .avi,
code c vit v kim tra chy tt trn phin bn MATLAB R2010a.
4.1 Lu chuyn ng thnh file nh .gif
S dng phng php th 2, khi ta lu c mt chuyn ng vo ma
trn M. Ta c phng php chung chuyn n thnh file nh .gif
Gi s c M lu chuyn ng, t n = length(M). Ta tin hnh nh
on code mu sau
1
for i = 1:n
fim = frame2im(F(lap));
[imind,cm] = rgb2ind(fim,256);
if lap == 1; % ghi frame u tin
imwrite(imind,cm,mypic.gif,gif, Loopcount,inf);
else
imwrite(imind,cm,mypic.gif,gif,WriteMode,...
append,Delaytime,0.05);
end
end
Cc gi tr tham s trong lnh imwrite c th c nhiu s la chn khc
nhau c khng nt thit phi theo mu trn y mt cch cng nhc.
Gi ta a ra mt v d, ly li chnh v d trong 3.6.
Code 30 (Lu chuyn ng thnh file .gif).
1
Chi tit v cc hm frame2im, rgb2ind,imwrite xem help MATLAB
65
CHNG 4. NH V MOVIE TRONG MATLAB 66
clear all
x = -pi:0.1:pi;
view(3);
n = length(x);
y = 1:n;
[x,y] = meshgrid(x,y);
Y = y/n*pi;
z = cos(Y) + sin(x);
set(gca,NextPlot,replacechildren)
set(gcf,Renderer,zbuffer);
hold on
axis([-5 5 0 80 -2 2])
set(gca,xtick,[]);
set(gca,ytick,[]);
set(gca,ztick,[]);
lap = 1;
for j = 1:0.1:10
z = cos(Y+j) + sin(x+j);
h = surf(x,y,z,LineStyle, none);
M(lap) = getframe;
%%%%%%--------------------------
fim = frame2im(M(lap));
[imind,cm] = rgb2ind(fim,256);
if lap == 1; % ghi frame u tin
imwrite(imind,cm,mypic.gif,gif, Loopcount,inf);
else
imwrite(imind,cm,mypic.gif,gif,WriteMode,...
append,Delaytime,0.05);
end
%%%%%%%--------------------------
drawnow
lap = lap + 1;
delete(h);
end
hold off
movie(M,2,30);
Sau khi run, MATLAB to ra file nh mypic.gif trong th mc hin hnh
(current folder). C th xem n bng trnh duyt web Internet Explorer
CHNG 4. NH V MOVIE TRONG MATLAB 67
Hnh 4.1: Xem nh ng bng IE
4.2 Lu chuyn ng thnh file movie .avi
Cng s dng phng php th 2, ta chuyn mt on chuyn ng M vo
file .avi
Bc 1. To mt object .avi, s dng hm avifile
aviobj = avifile(mymovie.avi,compression,None);
Bc 2. Chuyn dy ng t movie M v t v object aviobj bng hm
addframe vi on code mu sau
2
aviobj = avifile(mymovie.avi,compression,None);
for k=1:length(M)
aviobj = addframe(aviobj,M);
end
Bc 3. ng file aviobj.avi li sau khi hon tt vi hm close
aviobj = close(aviobj);
V d vi chuyn ng cng y t 18, code nh sau
2
Cc gi tr v trc ta ,. . . ch mang tnh v d. Chi tit cc hm xem help
CHNG 4. NH V MOVIE TRONG MATLAB 68
clear all
x = -pi:0.1:pi;
view(3);
n = length(x);
y = 1:n;
[x,y] = meshgrid(x,y);
Y = y/n*pi;
z = cos(Y) + sin(x);
set(gca,NextPlot,replacechildren)
set(gcf,Renderer,zbuffer);
hold on
axis([-5 5 0 80 -2 2])
set(gca,xtick,[]);
set(gca,ytick,[]);
set(gca,ztick,[]);
aviobj = avifile(mymovie.avi,compression,None);
for j = 1:0.1:10
z = cos(Y+j) + sin(x+j);
h = surf(x,y,z,LineStyle, none);
M = getframe;
%%%%------------------------------------
aviobj = addframe(aviobj,M);
%%%%------------------------------------
drawnow
delete(h);
end
hold off
aviobj = close(aviobj);
Kt thc, MATLAB to ra file mymovie.avi trong th mc hin hnh
(current folder), d ch vi giy nhng dung lng kh nng, test trn my
tnh ti thi im ny ln n 39MB.
Phng php khc to movie MATLAB cung cp lnh sau to
.avi ch bng mt lnh t matrix movie c
movie2avi(mov, myPeaks.avi, compression, None);
Vi ch nn Renderer l zbuffer trong qu trnh to matrix M.
V d vi chuyn ng besselj trong 3.7
CHNG 4. NH V MOVIE TRONG MATLAB 69
clear all
[x,y] = meshgrid([-10:0.5:10]);
set(gca,NextPlot,replacechildren)
set(gcf,Renderer,zbuffer);
for j = 1:1:300
z = besselj(0, (j-1)*0.2 + sqrt(x.^2 +y.^2));
surf(x,y,z)
drawnow
axis([-10 10 -10 10 -.5 1])
M(j) = getframe;
end
movie2avi(M, myyyy.avi, compression, None);
Kt thc thu c file .avi 20s vi dung lng 131MB.
Nhn xt Th nghim, cng mt on chuyn ng vi matrix M, lm
bng 2 cch to file .avi trn ta u c file .avi vi dung lung gn nh
bng nhau. ( trn ta chn compression l none trong c 2 cch)
Ti liu tham kho
[1] MATLAB The Language of Technical Computing, Using MATLAB
Graphics Version 5.2
[2] A MATLAB Companion for Multivarible Calculus, Jeffery Cooper.
Department of Mathematics University of Maryland
[3] http://en.wikipedia.org/wiki/Wave_function
[4] http://en.wikipedia.org/wiki/Harmonic_oscillator
[5] http://www.sky-engin.jp/en/MATLABAnimation/index.html
70

Você também pode gostar