Садржај
Увод у симулације
Физика у игрици
Библиотека Симаним
Кинематика транслаторног кретања
Транслаторно кретање
Питања Транслација
Симулација транслаторног кретања
Средња брзина
Динамика транслаторног кретања
Сила трења
Питања Сила трења
Симулација кретања услед силе трења
Разлагање сила
Питања Разлагање сила
Кинематика ротационог кретања
Основне кинематичке величине ротационог кретања
Питања Кинематика ротације
Котрљање
Питања Котрљање
Динамика ротационог кретања кретања
Динамика ротације и котрљања
Питања Ротација и котрљање
Закључак
Резиме
Евалуација
Евалуација курса

Увод у симулације

У овој лекцији ћемо ти показати:

  • Како да користиш симулације у овом курсу

  • Како изгледа скрипта једне симулације и шта значе поједине наредбе у њој

  • Како да припремиш свој рачунар за покретање симулација на њему


У оквиру овог курса користићемо симулације да бисмо ти помогли да разумеш физичке појаве о којима причамо. Ево, на пример, на следећој симулацији је приказано равномено кретање:

Симулацију можеш да покренеш, паузираш и зауставиш користећи два дугмета у горњем левом углу оквира. У горњем десном углу имаш могућност да подесиш почетне вредности неких физичких величина. У конкретном примеру то су почетни хоризонтални положај \(x_0\), вертикални положај \(y\) и брзина \(v\). Вертикални положај и брзина се у овом примеру не мењају током времена. Зато нисмо уводили посебне ознаке за почетну вредност.

Испробај:

Пробај да мењаш почетне вредности, покрећеш, паузираш и заустављаш симулацију.

Провери:

Када паузираш симулацију, израчунај пређени пут на основу протеклог времена и брзине, па провери да ли је иста толика разлика између тренутног и почетног хоризонталног положаја.

Симулација је замена за посматрање физичке појаве у природи или за извођење експеримента. Разлика је у томе што рачунар симулира физичку појаву, уместо да се физичка појава дешава у стварности.

Сигурно си чуо/чула да се за рачунарску игру каже да има „добро урађену физику”. То заправо значи да су у игрици добро симулиране физичке појаве. Ми ћемо у овом курсу користити симулацију за учење физике, aли ћемо те такође учити и како се праве симулације. Другим речима, учићемо те како се прави „физика у игрици”. За прављење симулација ће ти бити потребно мало програмирања. Не више од онога што се учи у шестом разреду основне школе или првом разреду гимназије. Ако ниси имао/имала прилике да у школи научиш програмирање у Пајтону или желиш да се подсетиш, препоручујемо ти курс:

Програмирање у Пајтону за први разред гимназије

Кутија која се креће

Ево како изгледа програм за једну једноставну симулацију:

Овакав кратак програм који имплементира симулацију ћемо звати скриптом за симулацију. Слободно кликни на дугме за покретање скрипте да видиш шта скрипта ради. То је симулација равномерног кретања веома слична раније приказаној симулацији са птицом, само са много мање детаља: креће се једна наранџаста кутија без облака, исписа вредности, вектора итд. Скрипту можеш да мењаш и поново је покренеш.

Испробај:

Повећај мало брзину (број у линији 6) и онда поново покрени скрипту.

Испробај:

Промени и димензије кутије (бројеви у линији 12) и види шта се дешава када поново покренеш скрипту.

Вратићемо се ускоро на то шта која линија кода у претходној скрипти значи, а пре тога ћемо ти објаснити шта треба да урадиш да би скрипте за симулације могао/могла да извршиш и на свом рачунару.

Покрени овај пример на свом рачунару

Уколико ниси у могућности да се сада бавиш инсталацијом на свом рачунару, можеш слободно да пређеш на поднаслов „Објашњење примера”, а када ти буде затребало можеш да се вратиш овде. И поред тога што ћеш примере скрипти за симулације моћи да модификујеш и извршаваш у оквиру веб стране, добро би било да и на свом рачунару подесиш да можеш да покрећеш и правиш скрипте. Ако пожелиш да правиш своје симулације или мало више мењаш постојеће, окружење које је инсталирано на твом рачунару ће ти пружити више могућности.

Корак 1. Ако имаш инсталиран Пајтон на свом рачунару, пређи на Корак 2.

Ако немаш инсталиран Пајтон на свом рачунару, прати први део следећег упутства (није ти потребан PyGame, довољан је први део упутства који се односи на Пајтон): Упутство за инсталацију Пајтона

Корак 2. Са линка https://github.com/Petlja/StemSimulacijeGim-files/archive/main.zip преузми zip фајл и распакуј га у неки фолдер на твом рачунару.

Даље ће бити потребно да у окружење за програмски језик Пајтон инсталираш пакет simanim. Ако немаш искуства са инсталирањем Пајтон пакета, припремили смо ти једноставно решење у кораку 3.

Корак 3. У фолдеру где је распакован zip пронађи фајл SETUP.BAT и покрени га (двокликом на име фајла у File Exploreru). Важно је да у том тренутку будеш повезан на интернет. Сачекај неко време да се са интернета преузму и инсталирају потребни пакети. На крају ћеш у фолдеру приметити пречицу START_IDLE помоћу које покрећеш развојно окружење IDLE.

Приметићеш и подфолдер .env. Ако нешто није прошло како треба и желиш да поново покренеш SETUP.BAT, пре тога треба да обришеш фолдер .env.

Сада можеш да покренеш пречицу START_IDLE. Након што се отвори развојно окружење IDLE, покрени опцију File -> Open и затим уђи у подфолдер 01_uvod и у оквиру њега изабери фајл kutija.py. Требало би да ти се у новом прозору отвори иста скрипта која је приказана претходно у овој лекцији. Кликни било где унутар тог прозора, па на тастатури притисни F5. То ће покренути скрипту и приказаће ти се симулација, што треба да изгледа као на следећој слици:

https://petljamediastorage.blob.core.windows.net/root/Media/Default/Kursevi/OnlineNastava/StemSimulacijeGim/idle-kutija.png

Затвори прозор у коме се извршава симулација и врати се у прозор у коме је отворена скрипта. Након тога у линији

    kutija = Box((m.x,m.y), 20, 10)

промени број 10 у број 20. Затим на тастатури притисни CTRL-S да сачуваш промену и поново покрени скрипту помоћу F5. Приказаће ти се симулација у којој је кутија квадратног облика:

https://petljamediastorage.blob.core.windows.net/root/Media/Default/Kursevi/OnlineNastava/StemSimulacijeGim/idle-kutija-kvadratna.png

На исти начин можеш да покрећеш и модификујеш друге скрипте. Ако желиш да направиш нову симулацију, најједноставније је да неку постојећу скрипту, на пример управо ову, копираш у нови фајл и затим преправиш да ради оно што желиш.

Објашњење примера

Дошло је време да објаснимо како ради скрипта коју смо ти приказали раније у овој лекцији.

Ако не желиш да стално скролујеш ову веб страну горе-доле да би мало гледао скрипту, мало гледао објашњења, имаш једну од две могућности:

  • отвори исту ову веб страну у другом табу или другом прозору и пребацуј се из једног у други таб или намести два прозора један поред другог,

  • уколико имаш инсталирано окружење на свом рачунару у складу са претходним упутствима, отвори скрипту у IDLE и распореди IDLE прозор и прозор веб браузера како ти одговара.

Хајде редом да објаснимо шта значи која линија у скрипти.

Линија 1: from simanim import *

Ова линија је потребна да бисмо укључили дефиниције из модула simanim. Укључили смо, на пример, дефиниције функција Box, Draw и Run које се користе у овој скрипти. Још неке дефиниције из модула simanim ћемо описати у наредним лекцијама.

Обрати пажњу

Ако правиш своје скрипте пази да ни један фајл не назовеш simanim.py. Команду from simanim import * на тај начин можеш да збуниш где треба да тражи модл simanim.

Линије 3-6: дефиниција функције setup

У дефиницији функције setup подешавамо све што треба да се подеси на почетку извршавања симулације.

У конкретном случају додељујемо почетне вредности за физичке величине које користимо у симулацији. Вредности \(x\) и \(y\) одређују позицију кутије, а \(v\) брзину. При томе уместо \(x\) пишемо m.x, уместо \(y\) пишемо m.y, a уместо \(v\) пишемо m.v.

То значи да физичке величине које користимо у симулацији памтимо као атрибуте од параметра m. Примети да је m наведено као параметар функције setup. После ће исто то m да се прослеђује као параметар у друге функције које дефинишемо у скрипти.

Линијe 8-10: дефиниција функције update

Функција update ће се позивати периодично у кратким временским размацима. У оквиру ове функције треба да променимо вредности физичких величина у складу са протеклим временом. У конкретном случају то значи да m.x треба да се повећа за онолико, за колико се кутија помера током протеклог времена.

Ово је слично прављењу цртаних филмова. Можда ти је већ познато како тече овај процес. Аниматори ураде низ цртежа, на којима се предмет помера мало по мало. Ти цртежи се потом емитују један по један. Када се цртежи веома брзо смењују, нисмо у стању да видимо сваки појединачан цртеж, већ нам изгледа да се предмет креће непрекидно. Да бисмо дочарали покрет од једне једине секунде потребно је више од 20 цртежа (број зависи од технологије која се користи), од којих се сваки емитује током највише 0.05 секунди.

Да бисмо одредили за колико се тело померило, примењујемо формулу из физике за пут код равномерног кретања:

\[s = v\cdot\ t\]

Овде рачунамо мале промене физичких величина током кратког верменског периода између два исцртавања. За те мале промене ћемо користити ознаку \(\Delta\) испред назива промењљиве:

  • са \(\Delta t\) оозначаваћемо промену времена, што је у овом случају дужина временског периода између два исцртавања,

  • са \(\Delta x\) означаваћемо промену положаја по хоризонталној оси у току временског интервала \(\Delta t\), што је у овом случају пређени пут у времену \(\Delta t\).

Са уведеним ознакама формула за пређени пут би изгледала:

\[\Delta x = v\cdot\Delta t\]

Команда m.x += m.v * m.dt у скрипти значи да смо вредност од m.x увећали за m.v * m.dt, што је примена претходне формуле.

Вредност m.dt представља \(\Delta t\). m.dt је унапред постављено на подразумевану вредност \(1/30\) јер се функција update позива \(30\) пута у секуди. Може се подесити и чешће или ређе позивање функције update, тј. мање или веће \(\Delta t\), што ћемо касније објаснити како се ради.

Ово значи да ће наша скрипта \(30\) пута у секунди рачунати за колико се тело померило (\(v\cdot\Delta t\)) и додавати ову вредност на тренутни положај тела. Овакав начин рачунања користићемо и надаље у свим симулацијама.

Линија 11: def draw(m):

У дефиницији функције draw одређујемо како ће се нацртати сцена на основу вредности физичких величина које смо иницијално поставили у функцији setup и затим периодично мењали у функцији update.

Линија 12:     kutija = Box((m.x,m.y), 20, 10)

Овим конструишемо правоугаону фигуру, тако да су координате доњег левог темена (m.x,m.y), ширина је 20, а висина 10. Конструисану фигуру додељујемо локалној променљивој kutija. Фигуру још увек нисмо нацртали. Пре цртања можемо да одредимо још нека својства фигуре.

Пробај:

Упиши друге бројеве уместо 20 и 10 и видећеш како кутија мења димензије.

Линија 15:     kutija.fill_color = '#ff8800'

Овим смо претходно конструисаној фигури одредили наранџасту боју. Питаш се како знамо да је #ff8800 наранџаста. Прво да ти кажемо да се таква ознака за боју назива hex code.

Постоје бројне достуне веб стране на којима можете бирати боје и добити hex code. На пример:

https://www.w3schools.com/colors/colors_picker.asp

Такође, у било ком програму где имаш опцију избора боје, обично имаш и могућност да очиташ hex code. На следећој слици види како то можеш да урадиш у програму Paint 3D који долази уз Windows оперативни систем:

https://petljamediastorage.blob.core.windows.net/root/Media/Default/Kursevi/OnlineNastava/StemSimulacijeGim/paint3d-color-picker.png

Пробај:

Упиши другу боју уместо #ff8800 и види како ће кутија да мења боју.

Линија 14:     Draw(kutija)

Позивом функције Draw цртамо фигуру коју смо претходно конструисали.

Линија 16: Run(setup, update, draw)

Позив функције Run треба да стоји на крају сваке скрипте. Заправо позивом ове функције почиње да се извршава симулација и да се дешава све што смо до сада описивали.

За вежбу

Мењај скипту на разне начине и види који је ефекат. То је најбољи начин да разумеш како скрипта за симулацију ради. На крају пробај да додаш још једну кутију.

Наилазићеш и на проблеме који су више у вези са програмским језиком Пајтон. Када се то деси, искористи прилику да се подсетиш или научиш како се нешто ради у Пајтону, или како се решава неки проблем на који наиђеш. На почетку ове лекције имаш препоручене курсеве за Пајтон. За конкретан проблем са којим се сусретнеш можеш и да провериш на интернету да ли је неко наишао да сличан проблем.

Упозорење:

Ако претражујеш по интернету како нешто да испрограмираш, немој никада да преузимаш и код себе извршаваш програмски кôд за који не разумеш шта ради. Увек буди свестан да неко може да ти подметне да извршиш нешто што ти не желиш, да би на тај начин провалио на твој рачунар.

Претходна лекција
Следећа лекција
A- A+
Тема
Темa

Prijavi problem


Obeleži sve kategorije koje odgovaraju problemu

Još detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link.
Nažalost nismo trenutno u mogućnosti da obradimo vaš zahtev.
Molimo vas da pokušate kasnije.