package Ġorg . aqu ila 3 d . core . math Ċ Ċ import Ġkotlin . jvm . Jvm Static Ċ import Ġkotlin . math . acos Ċ import Ġkotlin . math . cos Ċ import Ġkotlin . math . sin Ċ import Ġkotlin . math . sqrt Ċ Ċ /** Ċ Ġ* ĠA ĠUnit Ġ[ Quaternion ] Ġis Ġused Ġto Ġrepresent Ġa Ġrotation / orientation Ġin Ġ 3 D Ġspace . Ċ Ġ* Ċ Ġ* ĠAss uming Ġthe Ġ[ Quaternion ] s Ġin Ġquestion Ġare Ġnormalized Ġ( unit Ġlength ), Ġsubsequent Ġrot ations Ġcan Ġbe Ġperformed Ġby Ċ Ġ* Ġmultiply ing Ġqu atern ions Ġtogether . ĠIf Ġthey Ġare Ġnot Ġnormalized , Ġthen Ġthe Ġprovided Ġ[ rotate ] Ġfunctions Ġmust Ġbe Ġused . Ċ Ġ* Ċ Ġ* ĠNote Ġthat Ġ[ Quaternion ] Ġmath Ġis Ġassoci ative Ġbut Ġnot Ġcom mut ative Ġ- Ġi . e .: Ċ Ġ* Ċ Ġ* Ġ** q ** (** p **** r **) Ġ== Ġ(** q **** p ** )** r ** Ġbut Ġ** q **** p ** Ġ!= Ġ** p **** q ** Ċ Ġ* Ċ Ġ* ĠIt Ġis Ġadv antages Ġto Ġrepresent Ġorient ations Ġwith Ġ[ Quaternion ] s Ġas Ġthey Ġare Ġnot Ġsubject Ġto ĠG im ble ĠLock Ġlike ĠE uler Ċ Ġ* Ġrot ations , Ġprovide Ġsmooth Ġinterpolation Ġbetween Ġorient ations Ġand Ġreduce Ġthe Ġnumber Ġof Ġcomput ations Ġneeded Ġfor Ġany Ċ Ġ* Ġgiven Ġmutation . Ċ Ġ*/ Ċ class ĠQuaternion Ġ{ ĊĊĠĠĠ Ġvar Ġw : ĠDouble ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġx : ĠDouble ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġy : ĠDouble ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġz : ĠDouble ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructs Ġa Ġunit Ġquaternion Ġrepresenting Ġ 0 Ġrotation . ĠBy Ġdefault Ġthe Ġaxis Ġof Ġrotation Ġis Ġthe Ġ+ Y Ġaxis . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor () Ġ{ ĊĠĠĠĠĠĠĠ Ġw Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġx Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġy Ġ= Ġ 1 . 0 ĊĠĠĠĠĠĠĠ Ġz Ġ= Ġ 0 . 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructs Ġa Ġnew Ġ[ Quaternion ] Ġfrom Ġthe Ġprovided Ġ[ Float ] Ġcomponents . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( w : ĠFloat , Ġx : ĠFloat , Ġy : ĠFloat , Ġz : ĠFloat ): Ġthis ( w . toDouble (), Ġx . toDouble (), Ġy . toDouble (), Ġz . toDouble ()) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructs Ġa Ġnew Ġ[ Quaternion ] Ġfrom Ġthe Ġprovided Ġ[ Double ] Ġcomponents . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( w : ĠDouble , Ġx : ĠDouble , Ġy : ĠDouble , Ġz : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . w Ġ= Ġw ĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġx ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġy ĊĠĠĠĠĠĠĠ Ġthis . z Ġ= Ġz ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructs Ġa Ġnew Ġunit Ġ[ Quaternion ] Ġfrom Ġa Ġprovided Ġ[ Quaternion ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( other : ĠQuaternion ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . w Ġ= Ġother . w ĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġother . x ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġother . y ĊĠĠĠĠĠĠĠ Ġthis . z Ġ= Ġother . z ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructs Ġa Ġnew Ġunit Ġ[ Quaternion ] Ġfrom Ġa Ġgiven Ġrotation Ġabout Ġa Ġgiven Ġaxis . ĠThe Ġinputs Ġdo Ġnot Ġneed Ġto Ġbe ĊĠĠĠĠ Ġ* Ġnormalized . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġangle ĠAngle Ġof Ġrat ation Ġin Ġ[ Radians ] ĊĠĠĠĠ Ġ* Ġ@ param Ġaxis Ġ[ Vector 3 ] Ġrepresenting Ġthe Ġaxis Ġof Ġrotation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( angle : ĠRad ians , Ġaxis : ĠVector 3 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġsin ( angle . angle Ġ/ Ġ 2 . 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġnorm Axis Ġ= ĠVector 3 ( axis ). normalize () Ġ* Ġs ĊĠĠĠĠĠĠĠ Ġw Ġ= Ġcos ( angle . angle Ġ/ Ġ 2 . 0 ) ĊĠĠĠĠĠĠĠ Ġx Ġ= Ġnorm Axis . x ĊĠĠĠĠĠĠĠ Ġy Ġ= Ġnorm Axis . y ĊĠĠĠĠĠĠĠ Ġz Ġ= Ġnorm Axis . z ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructs Ġa Ġnew Ġ[ Quaternion ] Ġby Ġapplying Ġthe Ġprovided ĠE uler Ġrotation Ġangles Ġin Ġorder , Ġyaw Ġ- Ġpitch Ġ- Ġroll . ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġthese ĠE uler Ġangles Ġare Ġdefined Ġin ĠGL Ġcoordinate Ġspace , Ġnot Ġthe Ġtypical Ġrigid Ġbody Ġmechan ics Ġspace . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġyaw ĠRotation Ġabout Ġthe Ġ+ Y Ġaxis , Ġin Ġ[ Radians ] ĊĠĠĠĠ Ġ* Ġ@ param Ġpitch ĠRotation Ġabout Ġthe Ġ+ X ĠAxis , Ġin Ġ[ Radians ] ĊĠĠĠĠ Ġ* Ġ@ param Ġroll ĠRotation Ġabout Ġthe Ġ+ Z ĠAxis , Ġin Ġ[ Radians ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( yaw : ĠRad ians , Ġpitch : ĠRad ians , Ġroll : ĠRad ians ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġh Y aw Ġ= Ġyaw . angle Ġ/ Ġ 2 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġh Pitch Ġ= Ġpitch . angle Ġ/ Ġ 2 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġh Roll Ġ= Ġroll . angle Ġ/ Ġ 2 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġs Y aw Ġ= Ġsin ( h Y aw ) ĊĠĠĠĠĠĠĠ Ġval Ġc Y aw Ġ= Ġcos ( h Y aw ) ĊĠĠĠĠĠĠĠ Ġval Ġs Pitch Ġ= Ġsin ( h Pitch ) ĊĠĠĠĠĠĠĠ Ġval Ġc Pitch Ġ= Ġcos ( h Pitch ) ĊĠĠĠĠĠĠĠ Ġval Ġs Roll Ġ= Ġsin ( h Roll ) ĊĠĠĠĠĠĠĠ Ġval Ġc Roll Ġ= Ġcos ( h Roll ) ĊĊĠĠĠĠĠĠĠ Ġval Ġc Y aw c Pitch Ġ= Ġc Y aw Ġ* Ġc Pitch ĊĠĠĠĠĠĠĠ Ġval Ġs Y aws Pitch Ġ= Ġs Y aw Ġ* Ġs Pitch ĊĠĠĠĠĠĠĠ Ġval Ġc Y aws Pitch Ġ= Ġc Y aw Ġ* Ġs Pitch ĊĠĠĠĠĠĠĠ Ġval Ġs Y aw c Pitch Ġ= Ġs Y aw Ġ* Ġc Pitch ĊĊĠĠĠĠĠĠĠ Ġw Ġ= Ġc Roll Ġ* Ġc Y aw c Pitch Ġ+ Ġs Roll Ġ* Ġs Y aws Pitch ĊĠĠĠĠĠĠĠ Ġx Ġ= Ġc Roll Ġ* Ġc Y aws Pitch Ġ+ Ġs Roll Ġ* Ġs Y aw c Pitch ĊĠĠĠĠĠĠĠ Ġy Ġ= Ġc Roll Ġ* Ġs Y aw c Pitch Ġ- Ġs Roll Ġ* Ġc Y aws Pitch ĊĠĠĠĠĠĠĠ Ġz Ġ= Ġs Roll Ġ* Ġc Y aw c Pitch Ġ- Ġc Roll Ġ* Ġs Y aws Pitch ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġunary Minus () Ġ{ ĊĠĠĠĠĠĠĠ Ġinvert () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġplus ( other : ĠQuaternion ): ĠQuaternion Ġ{ ĊĠĠĠĠĠĠĠ Ġw Ġ+= Ġother . w ĊĠĠĠĠĠĠĠ Ġx Ġ+= Ġother . x ĊĠĠĠĠĠĠĠ Ġy Ġ+= Ġother . y ĊĠĠĠĠĠĠĠ Ġz Ġ+= Ġother . z ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġminus ( other : ĠQuaternion ): ĠQuaternion Ġ{ ĊĠĠĠĠĠĠĠ Ġw Ġ-= Ġother . w ĊĠĠĠĠĠĠĠ Ġx Ġ-= Ġother . x ĊĠĠĠĠĠĠĠ Ġy Ġ-= Ġother . y ĊĠĠĠĠĠĠĠ Ġz Ġ-= Ġother . z ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġtimes ( scale : ĠFloat ): ĠQuaternion Ġ= Ġtimes ( scale . toDouble ()) ĊĊĠĠĠ Ġoperator Ġfun Ġtimes ( scale : ĠDouble ): ĠQuaternion Ġ{ ĊĠĠĠĠĠĠĠ Ġw Ġ*= Ġscale ĊĠĠĠĠĠĠĠ Ġx Ġ*= Ġscale ĊĠĠĠĠĠĠĠ Ġy Ġ*= Ġscale ĊĠĠĠĠĠĠĠ Ġz Ġ*= Ġscale ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġtimes ( vector 3 : ĠVector 3 ): ĠQuaternion Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġw New Ġ= Ġ-( x Ġ* Ġvector 3 . x Ġ+ Ġy Ġ* Ġvector 3 . y Ġ+ Ġz Ġ* Ġvector 3 . z ) ĊĠĠĠĠĠĠĠ Ġval Ġx New Ġ= Ġw Ġ* Ġvector 3 . x Ġ+ Ġy Ġ* Ġvector 3 . z Ġ- Ġz Ġ* Ġvector 3 . y ĊĠĠĠĠĠĠĠ Ġval Ġy New Ġ= Ġw Ġ* Ġvector 3 . y Ġ+ Ġz Ġ* Ġvector 3 . x Ġ- Ġx Ġ* Ġvector 3 . z ĊĠĠĠĠĠĠĠ Ġval Ġz New Ġ= Ġw Ġ* Ġvector 3 . z Ġ+ Ġx Ġ* Ġvector 3 . y Ġ- Ġy Ġ* Ġvector 3 . x ĊĠĠĠĠĠĠĠ Ġw Ġ= Ġw New ĊĠĠĠĠĠĠĠ Ġx Ġ= Ġx New ĊĠĠĠĠĠĠĠ Ġy Ġ= Ġy New ĊĠĠĠĠĠĠĠ Ġz Ġ= Ġz New ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġtimes ( other : ĠQuaternion ): ĠQuaternion Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġw New Ġ= Ġw Ġ* Ġother . w Ġ- Ġx Ġ* Ġother . x Ġ- Ġy Ġ* Ġother . y Ġ- Ġz Ġ* Ġother . z ĊĠĠĠĠĠĠĠ Ġval Ġx New Ġ= Ġw Ġ* Ġother . x Ġ+ Ġx Ġ* Ġother . w Ġ+ Ġy Ġ* Ġother . z Ġ- Ġz Ġ* Ġother . y ĊĠĠĠĠĠĠĠ Ġval Ġy New Ġ= Ġw Ġ* Ġother . y Ġ+ Ġy Ġ* Ġother . w Ġ+ Ġz Ġ* Ġother . x Ġ- Ġx Ġ* Ġother . z ĊĠĠĠĠĠĠĠ Ġval Ġz New Ġ= Ġw Ġ* Ġother . z Ġ+ Ġz Ġ* Ġother . w Ġ+ Ġx Ġ* Ġother . y Ġ- Ġy Ġ* Ġother . x ĊĠĠĠĠĠĠĠ Ġw Ġ= Ġw New ĊĠĠĠĠĠĠĠ Ġx Ġ= Ġx New ĊĠĠĠĠĠĠĠ Ġy Ġ= Ġy New ĊĠĠĠĠĠĠĠ Ġz Ġ= Ġz New ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġdiv ( scale : ĠFloat ): ĠQuaternion Ġ= Ġdiv ( scale . toDouble ()) ĊĊĠĠĠ Ġoperator Ġfun Ġdiv ( scale : ĠDouble ): ĠQuaternion Ġ{ ĊĠĠĠĠĠĠĠ Ġw Ġ/= Ġscale ĊĠĠĠĠĠĠĠ Ġx Ġ/= Ġscale ĊĠĠĠĠĠĠĠ Ġy Ġ/= Ġscale ĊĠĠĠĠĠĠĠ Ġz Ġ/= Ġscale ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġthe Ġunit Ġaxis Ġof Ġrotation Ġfor Ġthis Ġquaternion . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠNormal ized Ġ[ Vector 3 ] Ġrepresenting Ġthe Ġaxis Ġof Ġrotation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Axis (): ĠVector 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( w Ġ== Ġ 1 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġa Ġ 0 Ġdegree Ġrotation Ġand Ġany Ġvector Ġis Ġvalid , Ġwe Ġdefault Ġto Ġ+ Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠVector 3 ( 0 . 0 , Ġ 1 . 0 , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdivisor Ġ= Ġsqrt ( 1 Ġ- Ġw Ġ* Ġw ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ( Vector 3 ( x , Ġy , Ġz ) Ġ/ Ġdivisor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġthe Ġangle Ġof Ġrotation Ġin Ġradians Ġfor Ġthis Ġquaternion . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġangle Ġof Ġrotation Ġin Ġ[ Radians ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Angle (): ĠRad ians Ġ= ĠRad ians ( 2 . 0 Ġ* Ġa cos ( w )) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalculates Ġthe Ġmagnitude Ġ( norm ) Ġof Ġthis Ġ[ Quaternion ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġmagnitude Ġ( norm ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmagnitude (): ĠDouble Ġ= Ġsqrt ( w Ġ* Ġw Ġ+ Ġx Ġ* Ġx Ġ+ Ġy Ġ* Ġy Ġ+ Ġz Ġ* Ġz ) ĊĊĠĠĠ Ġfun Ġnormalize (): ĠQuaternion Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmagnitude Ġ= Ġmagnitude () ĊĠĠĠĠĠĠĠ Ġreturn Ġdiv ( magnitude ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinvert (): ĠQuaternion Ġ{ ĊĠĠĠĠĠĠĠ Ġx Ġ= Ġ- x ĊĠĠĠĠĠĠĠ Ġy Ġ= Ġ- y ĊĠĠĠĠĠĠĠ Ġz Ġ= Ġ- z ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRot ates Ġ[ vector 3 ] Ġby Ġthe Ġrotation Ġrepresented Ġin Ġthis Ġ[ Quaternion ]. ĠMathematic ally Ġthis Ġis Ġequivalent Ġto : ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ** v ' ** Ġ= Ġ** q ** Ġ* Ġ** v ** Ġ* Ġ~ ** q ** Ġwhere Ġ~ ** q ** Ġis Ġthe Ġconj ug ate Ġor Ġinverse Ġof Ġthis Ġ[ Quaternion ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrotate ( vector 3 : ĠVector 3 ): ĠVector 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrotation Ġ= ĠQuaternion ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġconj Ġ= ĠQuaternion ( this ). invert () ĊĠĠĠĠĠĠĠ Ġreturn Ġ(( rotation Ġ* Ġvector 3 ) Ġ* Ġconj ). get Axis () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Quaternion ( w =$ w , Ġx =$ x , Ġy =$ y , Ġz =$ z )" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ== Ġnull Ġ|| Ġthis :: class Ġ!= Ġother :: class ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġother Ġas ĠQuaternion ĊĊĠĠĠĠĠĠĠ Ġif Ġ( w Ġ!= Ġother . w ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( x Ġ!= Ġother . x ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( y Ġ!= Ġother . y ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( z Ġ!= Ġother . z ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġw . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġx . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġy . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġz . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠConstructs Ġa Ġnew Ġ[ Quaternion ] Ġby Ġapplying Ġthe Ġprovided ĠE uler Ġrotation Ġangles Ġin Ġorder , Ġyaw Ġ- Ġpitch Ġ- Ġroll . ĊĠĠĠĠĠĠĠĠ Ġ* ĠNote Ġthat Ġthese ĠE uler Ġangles Ġare Ġdefined Ġin ĠGL Ġcoordinate Ġspace , Ġnot Ġthe Ġtypical Ġrigid Ġbody Ġmechan ics Ġspace . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġyaw ĠRotation Ġabout Ġthe Ġ+ Y Ġaxis , Ġin Ġ[ Degrees ] ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġpitch ĠRotation Ġabout Ġthe Ġ+ X ĠAxis , Ġin Ġ[ Degrees ] ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġroll ĠRotation Ġabout Ġthe Ġ+ Z ĠAxis , Ġin Ġ[ Degrees ] ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Euler Angles Deg ( yaw : ĠDe grees , Ġpitch : ĠDe grees , Ġroll : ĠDe grees ): ĠQuaternion ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ= ĠQuaternion ( yaw . to Radians (), Ġpitch . to Radians (), Ġroll . to Radians ()) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠConstructs Ġa Ġnew Ġ[ Quaternion ] Ġby Ġapplying Ġthe Ġprovided ĠE uler Ġrotation Ġangles Ġin Ġorder , Ġyaw Ġ- Ġpitch Ġ- Ġroll . ĊĠĠĠĠĠĠĠĠ Ġ* ĠNote Ġthat Ġthese ĠE uler Ġangles Ġare Ġdefined Ġin ĠGL Ġcoordinate Ġspace , Ġnot Ġthe Ġtypical Ġrigid Ġbody Ġmechan ics Ġspace . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġyaw ĠRotation Ġabout Ġthe Ġ+ Y Ġaxis , Ġin Ġ[ Radians ] ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġpitch ĠRotation Ġabout Ġthe Ġ+ X ĠAxis , Ġin Ġ[ Radians ] ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġroll ĠRotation Ġabout Ġthe Ġ+ Z ĠAxis , Ġin Ġ[ Radians ] ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Euler Angles Rad ( yaw : ĠRad ians , Ġpitch : ĠRad ians , Ġroll : ĠRad ians ): ĠQuaternion Ġ= ĠQuaternion ( yaw , Ġpitch , Ġroll ) ĊĠĠĠ Ġ} Ċ }