Kurssisisältö
Matlab Perusteet
Matlab Perusteet
Sovellus: 3D-Ratojen Laskeminen While-Silmukoilla
Tässä opit laskemaan esineiden radat liikkuessa 3D-avaruudessa, sekä toisen ohjelmoinnin osa-alueen: while-silmukat, joiden ainutlaatuiset ominaisuudet tekevät niistä yhtä perusasioita 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 koodia niin kauan kuin Boolean-ehto on tosi. Näin se toimii:
Boolean-ehto tarkistetaan 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älkeen.
Tämä rakenne on erityisen hyödyllinen, kun et tiedä etukäteen, kuinka monta kertaa silmukan täytyy toistua. Se suorittaa koodia, 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
.
Koodin pysäyttäminen kesken suorituksen auttaa arvioimaan logiikkaa ja koodia uudelleen.
Yksiulotteisen liikkeen yhtälö vakiokiihtyvyydellä
Videolla käytämme 1D-liikeyhtälöä:
missä:
on aika (sekunteina);
on kappaleen sijainti ajanhetkellä t;
on kappaleen alkusijainti;
on kappaleen alkunopeus;
on kappaleen kiihtyvyys (oletetaan vakioksi).
Tätä sovelletaan erikseen x, y, z -komponentteihin sijainnissa, nopeudessa ja kiihtyvyydessä 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ä syntyvät vakiotermit edustavat alkunopeutta ja alkusijaintia).
Se, että x, y, z ovat ortogonaalisia (keskenään kohtisuoria), mahdollistaa yhtälön soveltamisen kuhunkin ulottuvuuteen erikseen, ja samalla voimme hahmottaa tämän yhden ulottuvuuden analyysina ymmärtämisen helpottamiseksi.
Tehtävä
Kirjoita oma versiosi videolla esitetystä ohjelmasta ymmärtämällä seuraavat tavoitteet:
Tuo alkuperäiset sijainnit ja nopeudet erillisinä matriiseina sekä objektien nimetsolutaulukkona;
Järjestä nämä erikseen kahteen 3D-matriisiin siten, että jokaisen objektinsijainnit (x, y, z-koordinaatit) voivat kehittyä oman 2D-kerroksensa sarakkeissa. Tee sama alkuperäisille nopeuksille (vaikka ne eivät muutu—ne ovat aina alkuperäiset nopeudet) myöhempää indeksoinnin yhtenäisyyttä varten;
Käytä for-silmukkaaobjektien läpikäyntiin, jotta voidaan laskea kunkin objektin 3D-rata;
Laske kunkin objektin ratawhile-silmukassa, jonka Boolean-ehto tarkistaa ensin, onko objekti yhä maanpinnan yläpuolella (sen z-koordinaatti on ). While-silmukan sisällä sovelletaan 1D-liikeyhtälöä uuden sijainnin laskemiseen (sovella yhtälöä x, y, z-koordinaatteihin erikseen matriisioperaatioilla). Sijainnin laskemisen MILLOIN TAHANSA tulee perustua VAIN seuraaviin:
Objektin alkuperäinen sijainti;
Objektin alkuperäinen nopeus;
Tarkasteltava aika.
Sen EI tule perustua aiemmin laskettuun sijaintiin.
Syöttötietojen (alkuperäiset sijainnit + nopeudet) ja näistä muodostettujen 3D-matriisien tarkistaminen on aina hyvä tapa sulkea nämä ohjelman osat pois virhelähteinä;
Rajoita for-silmukka yhteen iteraatioon tai poista objektit 2 ja 3 (data ja nimet) Excel-tiedostosta nähdäksesi, miten ohjelmasi toimii yhdellä objektilla;
Ei-paraboliset radat voivat viitata ongelmaan liikeyhtälön soveltamisessa tai virheelliseen komponenttikohtaiseen laskentaan (muista pisteet ennen kertolaskua jne.);
Alkuperäisten sijaintien (kunkin 2D-kerroksen ensimmäinen sarake) 3D-rata-matriisissa 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 tulisi tuottaa liikettä vakionopeudella, jolloin muodostuu suoria kun piirretään (jos otat 3D-kuvion yläkuvasta, joka näyttää vain liikkeen x- ja y-suunnissa, joissa kiihtyvyys oli nolla, näet saman ilmiön);
Koordinaatistomme mukaan painovoima on (alaspäin kohti Maata), ei .
Kiitos palautteestasi!