Kurssisisältö
Matlab Perusteet
Matlab Perusteet
Sovellus: 3D-Ratojen Laskeminen While-Silmukoilla
Tässä opit laskemaan esineiden radat liikkuessaan 3D-avaruudessa, sekä tutustut ohjelmoinnin osa-alueeseen: while-silmukoihin, joiden ainutlaatuiset ominaisuudet tekevät niistä yhtä olennaisia kuin for-silmukat ja if-lauseet, vaikka niitä ei käytetä yhtä usein.
While-silmukan rakenne
While-silmukat ovat samankaltaisia kuin for-silmukat, mutta niiden keskeinen ero on toistorakenteen ohjausmekanismissa. Kiinteän toistomäärän sijaan while-silmukka suorittaa toistoja niin kauan kuin Boolean-ehto on tosi. Näin se toimii:
Boolean-ehto arvioidaan ensin;
Jos ehto on tosi, silmukan sisällä oleva koodi suoritetaan;
Koodin suorittamisen jälkeen ehto tarkistetaan uudelleen. Jos se on edelleen tosi, koodi suoritetaan uudelleen. Tämä jatkuu niin kauan kuin ehto pysyy totena;
Kun ehto muuttuu epätodeksi, silmukka päättyy ja ohjelma jatkuu silmukan jälkeisestä kohdasta.
Tämä rakenne on erityisen hyödyllinen, kun et tiedä etukäteen, kuinka monta kertaa silmukan täytyy toistua. Se suorittaa toistoja, kunnes tietty ehto täyttyy, mikä tekee siitä sopivan tehtäviin, joissa toistojen määrä riippuu dynaamisista tekijöistä.
Koska while-silmukat toistuvat, kunnes Boolean on epätosi, on olemassa riski (olosuhteista tai virheestä johtuen), että Boolean pysyy aina totena ja while-silmukka toistuu loputtomasti!
Jos siis huomaat ohjelmasi kestävän huomattavasti tavallista pidempään, kannattaa pysäyttää se Matlabissa painamalla:
ctrl
+c
;cmd
+c
.
Tällä voit pysäyttää käynnissä olevan koodin ja arvioida logiikan sekä koodin uudelleen.
Yksiulotteisen liikkeen yhtälö vakiokiihtyvyydellä
Videolla käytämme yksiulotteisen liikkeen yhtälöä:
t: aika (sekunteina);
x(t): kappaleen sijainti ajanhetkellä t;
xi: kappaleen alkusijainti;
vi: kappaleen alkunopeus;
a: kappaleen kiihtyvyys (oletetaan vakioksi).
Tätä sovelletaan erikseen ortogonaalisiin x, y, z -komponentteihin (sijainti, nopeus ja kiihtyvyys) komponenttikohtaisilla matriisioperaatioilla.
Tämä yhtälö on vakiintunut fysiikassa ja se johdetaan yleensä algebrallisesti (hieman työläämpää, mutta ei vaikeaa) tai integroimalla vakio kiihtyvyys kahdesti ajan suhteen (ja tunnistamalla, että tuloksena saadut vakiotermit edustavat alkunopeutta ja alkusijaintia).
Se, että x, y, z ovat ortogonaalisia (keskenään kohtisuoria), mahdollistaa tämän soveltamisen kuhunkin ulottuvuuteen erikseen, ja samalla voimme hahmottaa tämän yhden ulottuvuuden analyysina, mikä yksinkertaistaa ymmärtämistä.
Tehtävä
Kirjoita oma versiosi videon ohjelmasta ymmärtämällä tavoitteet:
Tuo alkuperäiset sijainnit ja nopeudet erillisinä matriiseina sekä objektien nimetsolutaulukkona;
Accordionoi nämä erikseen kahteen 3D-matriisiin siten, että jokaisen objektinsijainnit (x, y, z -koordinaatit) voivat kehittyä oman 2D-kerroksensa sarakkeissa. Sama voidaan tehdä alkuperäisille nopeuksille (vaikka ne eivät muutu – ne ovat aina alkuperäiset nopeudet) myöhempää indeksoinnin yhtenäisyyttä varten;
For-silmukkaobjektien yli, jotta voidaan laskea kunkin objektin 3D-radan;
Laske kunkin objektin ratawhile-silmukassa, jonka Boolean ensin tarkistaa, onko objekti vielä maanpinnan yläpuolella (sen z-koordinaatti on ≥ 0). While-silmukan sisällä sovelletaan 1D-liikeyhtälöä uuden sijainnin laskemiseen (soveltaen sitä x, y, z -koordinaatteihin erikseen matriisioperaatioilla). Sijainnin laskemisen millä tahansa ajanhetkellä tulee perustua VAIN seuraaviin:
Objektin alkuperäinen sijainti;
Objektin alkuperäinen nopeus;
Tarkasteltava aika.
Sen EI tule perustua aiemmin laskettuun sijaintiin.
Syöttötietojen (alkusijainnit + -nopeudet) ja näistä accordionoitujen 3D-matriisien tarkistaminen on aina hyvä tapa sulkea nämä ohjelman osat pois virhelähteinä;
Rajoita for-silmukka yhteen iteraatioon tai poista vastaavasti objektit 2 ja 3 (data ja labels) Excel-tiedostosta nähdäksesi, miten ohjelmasi toimii yhdellä objektilla;
Ei-parabolinen rata voi viitata ongelmaan liikeyhtälön soveltamisessa tai komponenttikohtaisten laskujen ohjelmoinnissa (muista pisteet ennen kertolaskua jne.);
Alkuperäisten sijaintien (kunkin 2D-kerroksen ensimmäinen sarake) 3D-ratamatriisissasi tulisi olla samat kuin Excel-tiedostossa;
Negatiivisia arvoja ei tulisi olla (jokainen objekti aloitti positiivisella sijainnilla ja nopeudella kaikissa x, y, z -suunnissa);
Tarkista, miten kiihtyvyys on määritelty, tai kokeile asettaa se nollaksi. Tämän pitäisi tuottaa liikettä vakionopeudella, jolloin muodostuu suoria kun piirretään (jos otat 3D-kuvion ylhäältä, jossa näkyy vain liike x, y -suunnissa, joissa kiihtyvyys oli nolla, näet saman ilmiön);
Koordinaatistomme mukaan painovoima on -9.8 m/s² (alaspäin kohti Maata), ei +9.8.
Kiitos palautteestasi!