Лекция №12+ №13 қосымшалары фкә пәні Оқу тобы: 1502-10, 1510-10 12. Matlab жүйесіндегі анимация



Pdf көрінісі
бет1/4
Дата13.06.2023
өлшемі445,21 Kb.
#101005
түріЛекция
  1   2   3   4


 
Лекция №12+ №13 қосымшалары
ФКӘ пәні
Оқу тобы: 1502-10, 1510-10

 
 
12. MATLAB жүйесіндегі анимация 
 
MATLAB жүйесінде анимациялық кескіндерді көрсетудің екі әдісі бар. 
Біріншісінде өзгеретін сурет циклдік түрде axіs графикалық объектісіне қайта 
сызу арқылы орындалады. Ал екіншісінде көрсетілетін кадрлар массив 
түрінде жинақталады. Сосын олар movie («фильм» дегенді білдіреді) 
функциясы арқылы көрсетіледі.
Бірінші әдісті қарастырамыз. Мысал ретінде материалдық нүктенің 
шеңбер бойымен бір қалыпты қозғалысын қарастырамыз. Алдымен 
дайындық фрагментін орындаймыз. 
x = -1 : 0.01 : 1; 
y1=sqrt(1-x.*x); 
y2= - y1; 
plot(x, y1, ΄k΄, x, y2, ΄k΄); 
axis square; 
hold on 
Мұнда материалдық нүкте қозғалатын траектория қара түспен сызылады. Ал 
hold on командасы барлық келесі графиктер осы график үстіне сызылуына 
рұқсат береді. 
Енді материалдық нүктенің өзін сызып аламыз және оны бастапқы 
қалпына орналастырамыз:
x=1; y=0; 
h=plot(x,y, ΄.k΄); 
set(h, ΄EraseMode΄, ΄xor΄, ΄MarkerSize΄, 18); 
Материалдық нүкте деп отырғанымыз үлкендігі 18 санымен берілген
қара түсті (plot командасындағы k белгісі) жалғыз нүкте. Ол негізінде line 
түріндегі объект болып келеді. Оның координаттарын динамикалық түрде 


өзгертіп отырамыз. Мұнда MATLAB жүйесі кескіннің ескісін өшіріп, 
жаңасын сызып отырады. Ал мұндай қайта сызу көзге білінбейтін дәрежеде 
болуы үшін line түріндегі объект үшін (һ сипаттамасымен берілген)
΄EraseMode΄ (өшіру тәсілін) опциясының мәнін ΄xor΄ деп беру қажет. Әйтпесе 
графиктің қайта сызылып жатқандығы көзге айқын тасталып тұрады.
Келесі кезекте материалдық нүктенің циклдік қозғалысын сызамыз: 
t = 0; dt =0.01; a = 0.5;
while 1 
t = t+dt; 
x = cos(a*t); 
y = sin(a*t); 
set(h, ΄XData΄, x, ΄YData΄, y); 
end 
Циклдік қозғалысты тоқтату үшін Ctrl+C немесе Ctrl+Break пернелерін 
басу керек. Бұл әдіс материалдық нүктенің өлшемі бүкіл axes объектісі 
ауданымен салыстырғанда кіші болғандықтан жақсы нәтиже береді. Ал егер 
оның өлшемі үлкен болса, онда анимация сапасы жақсы болмас еді.
Мұндай жағдайда басқа, екінші әдіс қолданылады. Онда барлық 
көрсетілетін аралық кадрлар дайындап, сақталып қойылады. Сосын олар 
movie командасымен көрсетіледі. Мысал үшін 200 нүктенің «броундық 
қозғалысын» тік бұрыштың ішінде көрсетелік. Олардың қозғалысының 
кездейсоқтығы бір қалыпты таралу және қалыпты (нормал) таралу 
функцияларымен берілетін кездейсоқ сандар генераторлары rand және randn 
функцияларының көмегімен қамтмасыз етіледі.
Орташа жылдамдықтары v параметрімен анықталатын 200 атомның 
броундық қозғалысын көрсету үшін 100 кадр (Frames) дайындаймыз: 
nA = 200; nFrames = 100; v = 0.03; 
x = rand(nA, 1) – 0.5; 
y = rand(nA, 1) – 0.5; 
h = plot(x, y, ΄.΄); 


set(h, ΄MarkerSize΄, 10); 
axis([-1 1 -1 1]); 
axis square; 
Buf = moviein (nFrames); 
Соңғы қатардағы moviein функциясы арқылы комьпютер жадында өте 
үлкен көлемдегі Вuf буфері жасалып, онда көрсетілетін барлық кадрлар 
сақталатын болады.
Буфер дайын болғасын, енді оған кадрларды орналастырамыз. Мұның 
үшін getframe функциясын пайдаланамыз. Ол әр бір кадрды буфердің бір бір 
бағанасына орналастырады: 
for к = 1 : nFrames 
x = x+v*randn(nA, 1); 
y = y+v*randn(nA, 1); 
set(h, ΄XData΄, x, ΄YData΄, y); 
Buf(:, k) = getframe; 
end 
“Суретке алынған роликті” көрсету үшін movie функциясын 5 рет қайта 
пайдаланамыз (8-сурет): 
movie(Buf, 5); 


8-сурет. Броундық қозғалыстың анимациясы. 
Бұл “кинофильмді” сақтау қажеті болмағанда, комьпютер жадын 
төмендегі команда арқылы тазалаймыз: 
clear Buf


Достарыңызбен бөлісу:
  1   2   3   4




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет