Лекция №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
Достарыңызбен бөлісу: |