Vektorid, kvaternioonid ja maatriksid Unitys

Vektorid Unitys

Vektorid Unitys, nagu ka gümnaasiumi matemaatikas, on kahe- või kolmekohalised arvud, millega saab kirjeldada mingi objekti geomeetrilisi suurusi ning teostada matemaatilisi tehteid. Unitys objekti arvulised omadused nagu positsioon, kiirus ja suurus (scale) on vektorsuurused. 

UnityEngine-i C# teegis on vektorite klass kättesaadaval nimede Vector2() ja Vector3() (ka Vector4()) abil, kus "2" ja "3" (ja "4") on vastavalt n-kohalisuse ehk dimensioonilisuse märkimiseks. Vector2() klassi kasutatakse 2D maailmas ja Vector3() 3D maailmas. Vector4() kasutatakse tavaliselt varjutajate ehk shaderite kirjutamisel.

Unity vektoritega saab teostada matemaatilisi tehteid nagu liitmine, lahutamine, ning korrutamine ühe teguriga ehk skaleerimine. Lisaks saab Unitys teostada vektorite skalaar- ja vektorkorrutist (ristkorrutis). Nende tehete funktsioonid on vastavalt Dot(vektor_a, vektor_b) ja Cross(vektor_a, vektor_b). Dot(vektor_a, vektor_b) funktsiooni ehk skalaarkorrutise väljundiks on float väärtus, mis võrdne argumentide magnituudide ja nendevahelise nurga koosinuse korrutisega. Cross(vektor_a, vektor_b) funktsiooni ehk ristkorrutise tehte väljundiks on aga vektor, mis on risti argumentidega ja mille magnituud on võrdne argumentide magnituudide ja nendevahelise nurga siinuse korrutisega.

Skalaar- ja vektorkorrutise kasutamine on mänguarenduses kasulik näiteks pöördliikumise planeerimisel ja vektorite projektsioonide väljaarvutamisel.

Üks parema käe reeglitest, mille järgi määrata Cross(a, b) suund. 

Et antud vektorkorrutise resultant oleks vastassuunaline siis saab vektorite omaduste järgi kasutada emba-kumba järgnevaist: -Cross(a, b) = Cross(b, a).

Kvaternioonid Unitys

Kvaternioonide ning nende abil asetuse (rotation) muutmise kohta vaata 3B1B videoid või katseta interaktiivselt siin.

Euleri nurgad vs. kvaternioonid

Gimbal lock on ühe vabadusastme kaotus kolme gimbali süsteemis, mis juhtub siis, kui kahe gimbali (ehk Euleri nurkade järgi pöörlemistelje) tasandid ühtivad "lukustades" pöörlemise 2-dimensioonilisesse süsteemi. Kasutades kvaternioone, gimbal lock'i ei teki - seetõttu kasutataksegi mänguarenduses kvaternioone.

NB! Kvaternioonid on keeruline matemaatiline konstrukt ning seda ei pea süviti mõistma selleks, et mänguarendusega hakkama saada. Kõik edasine räägib kvaternioonidest Unity kontekstis. 

Kõik vajalik kvaternioonidest

Quaternion.Euler(), defineeritud kvaternioon .eulerAngles ning kvaternioonide korrutamine on kõige kasulikumad funktsioonid, mida kvaternioonide kohta tuleb teada.