8. Симулације физичких појава¶
Садржај
8.1. О библиотеци Симаним¶
У Петљи је развијена Пајтон библиотека Симаним, намењена прављењу симулација физичких појава и других анимација (сим-аним - симулације и анимације). Бибилотека Симаним може да се користи и независно од система Петљадок за писање курсева и приручника (или документације). Довољно је да се инсталира ова библиотека (куцањем pip install simanim
у командној линији), да се укључи у Пајтон програм (нпр. писањем from simanim import *
у првом реду проргама) и да се даље нормално користи у проргаму.
Мада званична документација библиотеке још није написана, у ту сврху веома добро могу да послуже Петљини курсеви Физичке симулације - курс за основну школу и Физичке симулације - курс за гимназију. У оба курса постоји поглавље Увод у симулације, у коме се објашњавају основни концепти писања симулација помоћу библиотеке Симаним. У наставку курсева могу се наћи примери симулација са објашњењима како су те симулације направљене.
Када имате симулације (или било какве анимације) већ написане употребом библиотеке Симаним, можете једноставно да их укључите у свој Петљадок курс или приручник. Постоје две директиве помоћу којих то можете да урадите:
директивом
simanim
се симулација укључује тако да може само да се извршава. Кôд се не види, па не може ни да се модификује.директивом
pycode
се симулација укључује заједно са својим кодом, који се појављује у едитору. Када је укључена на овакав начин, осим што може да се извршава, симулација може да се преправља и дорађује.
У наставку ће бити објашњено и показано како се ове директиве користе.
8.2. Симулација која се само извршава - simanim¶
Као што је речено, директива simanim
се користи за укључивање симулације која може само да се извршава. Овај начин укључивања је погодан када програмирање није тема и када читаоце не интересује кôд већ само појава, односно анимација.
У општем облику директива simanim
изгледа овако:
.. simanim:: <jednisveni_id>
:folder: <putanja>
:script: <ime_pajton_fajla>
:images: <imena_slika_razdvojena_zarezima>
Овде <putanja>
(аргумент опције :folder:
) представља релативну путању до фолдера у коме се напази Пајтон програм и слике које се у њему користе. Вредност опције :script:
треба да буде име фајла (без путање) у коме је Пајтон програм, док су аргументи опције :images:
имена фајлова са употребљеним сликама, такође без путање.
На пример:
.. simanim:: smp-ptica
:folder: ../../_sim_py
:script: ptica.py
:images: ptica-leti-udesno.png
У овом примеру, директива simanim
има аргумент smp-ptica
. Тај аргумент се користи као идентификатор симулације у курсу или приручнику, па мора да буде јединствен у оквиру целог пројекта за сваку симулацију коју укључујемо. Опција folder
има вредност путање до фолдера у који смо ставли све скрипте са анимацијама и слике које се у њима користе. У овом демо курсу, то је фолдер _sim_py
у root-у нашег пројекта. Опцијама script
и images
укључујемо фајлове који су потребни за ову симулацију.
Претходни кôд у браузеру изгледа овако:
Ако се у симулацији користи више фајлова са сликама, у опцији image
треба навести имена свих тих фајлова, раздвојена зарезима (а пожељно је и размацима). У следећем примеру симулација користи три слике, слику дечака на тротинету и две слике позадине које се смењују у зависности од вредности коефицијента трења. Повећавањем коефицијента трења mu
(тј. μ) преко 0.4, мења се слика позадине и приказује се летњи амбијент, коме иначе одговарају више вредности коефицијента трења.
Ово је код помоћу којег смо укључили симулацију у наш пројекат:
.. simanim:: sm-trotinet
:folder: ../../_sim_py
:script: trotinet.py
:images: city-summer.jpg, city-winter.jpg, boy-scooter.png
Резултат у браузеру изгледа овако:
У директиви simanim
може да се користи и опција scale
, која ће прозор целе симулације скалирати (увећати или смањити) задат број пута, под условом да у прозору браузера има довољно места. Ако исту директиву од малопре сада напишемо са опцијом скалирања 1.2 пута, видећемо да ће прозор и сви елементи нацртани у симулацији бити већи 1.2 пута, односно за 20%.
.. simanim:: sm-trotinet2
:folder: ../../_sim_py
:script: trotinet.py
:images: city-summer.jpg, city-winter.jpg, boy-scooter.png
:scale: 1.2
Наравно, ако се уз опцију :scale:
наведе број мањи од 1, приказ симулације ће бити смањен.
8.3. Симулација са отвореним кодом - pycode¶
Када се бавимо управо скриптама за симулацију, желимо да корисник може да пише и мења кôд симулације. У том случају користимо директиву pycode
, која има исте опције са истим значењем као код директиве simanim
, а разлика је само у начину приказивања симулације. Када користимо директиву pycode
, у браузеру се приказује и едитор са изворним кодом симулације. Овако приказана симулација се покреће кликом на дугме покрени скрипту
, а извршава се у модалном прозору.
Приказивање симулације птице која лети (коју смо већ видели на почетку ове стране) помоћу директиве pycode
изгледа овако:
.. pycode:: primer-pycode
:folder: ../../_sim_py
:script: ptica.py
:images: ptica-leti-udesno.png
Овако изгледа резултат који добијамо у браузеру: