Escolar Documentos
Profissional Documentos
Cultura Documentos
v Elevation= 90
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
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
, 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