Садржај
Увод

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

Овако изгледа резултат који добијамо у браузеру:

(Created using Swinx, RunestoneComponents and PetljaDoc)
© 2022 Petlja
A- A+