package Ġgl matrix Ċ Ċ import Ġkotlin . js . Math Ċ Ċ class ĠVec 3 () Ġ: ĠGl Matrix () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġvector : ĠArray < Double > Ġ= ĠarrayOf ( 0 . 0 , Ġ 0 . 0 , Ġ 0 . 0 ) ĊĊĠĠĠ Ġpublic Ġvar Ġx : ĠDouble ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis [ 0 ] ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 ] Ġ= Ġvalue ; Ġ} ĊĊĠĠĠ Ġpublic Ġvar Ġy : ĠDouble ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis [ 1 ] ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 1 ] Ġ= Ġvalue ; Ġ} ĊĊĠĠĠ Ġpublic Ġvar Ġz : ĠDouble ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis [ 2 ] ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 2 ] Ġ= Ġvalue ; Ġ} ĊĊĊĠĠĠ Ġconstructor ( component X : ĠDouble , Ġcomponent Y : ĠDouble , Ġcomponent Z : ĠDouble ) Ġ: Ġthis () Ġ{ ĊĠĠĠĠĠĠĠ Ġvector [ 0 ] Ġ= Ġcomponent X ĊĠĠĠĠĠĠĠ Ġvector [ 1 ] Ġ= Ġcomponent Y ĊĠĠĠĠĠĠĠ Ġvector [ 2 ] Ġ= Ġcomponent Z ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġget ( index : ĠInt ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvector [ index ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġset ( index : ĠInt , Ġvalue : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvector [ index ] Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġvec 3 To Clone Ġnew ĠVec 3 Ġinitialized Ġwith Ġvalues Ġfrom Ġan Ġexisting Ġvector ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġvec 3 To Clone Ġvector Ġto Ġclone ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġvec 3 To Clone Ġnew Ġ 3 D Ġvector ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclone (): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠVec 3 ( this . vector [ 0 ], Ġthis . vector [ 1 ], Ġthis . vector [ 2 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalculates Ġthe Ġlength Ġof Ġvec 3 To Calculate Length Of ĠVec 3 ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġvec 3 To Calculate Length Of Ġvector Ġto Ġcalculate Ġlength Ġof ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Number } Ġlength Ġof Ġvec 3 To Calculate Length Of ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġlength (): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġthis . vector [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġthis . vector [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġz Ġ= Ġthis . vector [ 2 ] ĊĠĠĠĠĠĠĠ Ġreturn ĠMath . sqrt ( x Ġ* Ġx Ġ+ Ġy Ġ* Ġy Ġ+ Ġz Ġ* Ġz ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalculates Ġthe Ġsize Ġof ĠVec 3 ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Number } Ġelements Ġof ĠVec 3 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsize (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . vector . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCopy Ġthe Ġvalues Ġfrom Ġone ĠVec 3 Ġto Ġanother ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out Ġthe Ġreceiving Ġvector ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġsource Ġthe Ġsource Ġvector ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcopy ( source : ĠVec 3 ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . vector [ 0 ] Ġ= Ġsource [ 0 ] ĊĠĠĠĠĠĠĠ Ġthis . vector [ 1 ] Ġ= Ġsource [ 1 ] ĊĠĠĠĠĠĠĠ Ġthis . vector [ 2 ] Ġ= Ġsource [ 2 ] ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġtwo ĠVec 3 's ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out Ġthe Ġreceiving Ġvector ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġfirst Sum mand Ġthe Ġfirst Ġoperand ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġsecond Sum mand Ġthe Ġsecond Ġoperand ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd ( sum mand : ĠVec 3 ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . vector [ 0 ] Ġ+= Ġsum mand [ 0 ] ĊĠĠĠĠĠĠĠ Ġthis . vector [ 1 ] Ġ+= Ġsum mand [ 1 ] ĊĠĠĠĠĠĠĠ Ġthis . vector [ 2 ] Ġ+= Ġsum mand [ 2 ] ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġplus ( sum mand : ĠVec 3 ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġclone (). add ( sum mand ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSubtract s Ġvector Ġsub tr ah end Ġfrom Ġvector Ġmin u end ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out Ġthe Ġreceiving Ġvector ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġmin u end Ġthe Ġfirst Ġoperand ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġsub tr ah end Ġthe Ġsecond Ġoperand ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsubtract ( sub tr ah end : ĠVec 3 ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . vector [ 0 ] Ġ-= Ġsub tr ah end [ 0 ] ĊĠĠĠĠĠĠĠ Ġthis . vector [ 1 ] Ġ-= Ġsub tr ah end [ 1 ] ĊĠĠĠĠĠĠĠ Ġthis . vector [ 2 ] Ġ-= Ġsub tr ah end [ 2 ] ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġminus ( sub tr ah end : ĠVec 3 ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġclone (). subtract ( sub tr ah end ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMultip lies Ġtwo ĠVec 3 's ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out Ġthe Ġreceiving Ġvector ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġmultiplier Ġthe Ġfirst Ġoperand ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġmultip lic and Ġthe Ġsecond Ġoperand ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmultiply ( multiplier : ĠVec 3 ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . vector [ 0 ] Ġ*= Ġmultiplier [ 0 ] ĊĠĠĠĠĠĠĠ Ġthis . vector [ 1 ] Ġ*= Ġmultiplier [ 1 ] ĊĠĠĠĠĠĠĠ Ġthis . vector [ 2 ] Ġ*= Ġmultiplier [ 2 ] ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġtimes ( multiplier : ĠVec 3 ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmultiplier . clone (). multiply ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDiv ides Ġtwo ĠVec 3 's ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out Ġthe Ġreceiving Ġvector ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġdiv id end Ġthe Ġfirst Ġoperand ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġdivisor Ġthe Ġsecond Ġoperand ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdivide ( div isor : ĠVec 3 ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . vector [ 0 ] Ġ/= Ġdivisor [ 0 ] ĊĠĠĠĠĠĠĠ Ġthis . vector [ 1 ] Ġ/= Ġdivisor [ 1 ] ĊĠĠĠĠĠĠĠ Ġthis . vector [ 2 ] Ġ/= Ġdivisor [ 2 ] ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġdiv ( div isor : ĠVec 3 ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġclone (). divide ( div isor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMath . ceil Ġthe Ġcomponents Ġof Ġvec 3 To Ce il ĠVec 3 ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out Ġthe Ġreceiving Ġvector ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġvec 3 To Ce il Ġvector Ġto Ġceil ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġceil (): ĠInt Array Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠInt Array ( 3 ) ĊĠĠĠĠĠĠĠ Ġoutput [ 0 ] Ġ= ĠMath . ceil ( this . vector [ 0 ]) ĊĠĠĠĠĠĠĠ Ġoutput [ 1 ] Ġ= ĠMath . ceil ( this . vector [ 1 ]) ĊĠĠĠĠĠĠĠ Ġoutput [ 2 ] Ġ= ĠMath . ceil ( this . vector [ 2 ]) ĊĠĠĠĠĠĠĠ Ġreturn Ġoutput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMath . floor Ġthe Ġcomponents Ġof Ġvec 3 To Floor ĠVec 3 ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out Ġthe Ġreceiving Ġvector ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġvec 3 To Floor Ġvector Ġto Ġfloor ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfloor (): ĠInt Array Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠInt Array ( 3 ) ĊĠĠĠĠĠĠĠ Ġoutput [ 0 ] Ġ= ĠMath . floor ( this . vector [ 0 ]) ĊĠĠĠĠĠĠĠ Ġoutput [ 1 ] Ġ= ĠMath . floor ( this . vector [ 1 ]) ĊĠĠĠĠĠĠĠ Ġoutput [ 2 ] Ġ= ĠMath . floor ( this . vector [ 2 ]) ĊĠĠĠĠĠĠĠ Ġreturn Ġoutput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġminimum Ġof Ġtwo ĠVec 3 's ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out Ġthe Ġreceiving Ġvector ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġfirst Operand Ġthe Ġfirst Ġoperand ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġsecond Operand Ġthe Ġsecond Ġoperand ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmin ( operand : ĠVec 3 ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠVec 3 ( Math . min ( this . vector [ 0 ], Ġoperand [ 0 ]), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMath . min ( this . vector [ 1 ], Ġoperand [ 1 ]), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMath . min ( this . vector [ 2 ], Ġoperand [ 2 ])) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġmaximum Ġof Ġtwo ĠVec 3 's ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out Ġthe Ġreceiving Ġvector ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġfirst Operand Ġthe Ġfirst Ġoperand ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġsecond Operand Ġthe Ġsecond Ġoperand ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmax ( operand : ĠVec 3 ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠVec 3 ( Math . max ( this . vector [ 0 ], Ġoperand [ 0 ]), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMath . max ( this . vector [ 1 ], Ġoperand [ 1 ]), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMath . max ( this . vector [ 2 ], Ġoperand [ 2 ])) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMath . round Ġthe Ġcomponents Ġof Ġvec 3 To Round ĠVec 3 ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out Ġthe Ġreceiving Ġvector ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġvec 3 To Round Ġvector Ġto Ġround ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġround (): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠVec 3 (( Math . round ( this [ 0 ])). toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( Math . round ( this [ 1 ])). toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( Math . round ( this [ 2 ])). toDouble ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSca les Ġvec 3 To Scale ĠVec 3 Ġby Ġvec 3 To Scale Ġscalar Ġnumber ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out Ġthe Ġreceiving Ġvector ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġvec 3 To Scale Ġthe Ġvector Ġto Ġscale ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Number } Ġamount To Scale By Ġamount Ġto Ġscale Ġthe Ġvector Ġby ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġscale ( amount To Scale By : ĠDouble ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠVec 3 () ĊĠĠĠĠĠĠĠ Ġoutput [ 0 ] Ġ= Ġthis . vector [ 0 ] Ġ* Ġamount To Scale By ĊĠĠĠĠĠĠĠ Ġoutput [ 1 ] Ġ= Ġthis . vector [ 1 ] Ġ* Ġamount To Scale By ĊĠĠĠĠĠĠĠ Ġoutput [ 2 ] Ġ= Ġthis . vector [ 2 ] Ġ* Ġamount To Scale By ĊĠĠĠĠĠĠĠ Ġreturn Ġoutput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġtwo ĠVec 3 's Ġafter Ġscaling Ġthe Ġsecond Ġoperand Ġby Ġfirst Sum mand Ġscalar Ġvalue ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out Ġthe Ġreceiving Ġvector ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġfirst Sum mand Ġthe Ġfirst Ġoperand ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġsecond Sum mand Ġthe Ġsecond Ġoperand ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Number } Ġamount To Scale Ġthe Ġamount Ġto Ġamount To Scale Ġsecond Sum mand Ġby Ġbefore Ġadding ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġscale And Add ( sum mand : ĠVec 3 , Ġamount To Scale : ĠDouble ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠVec 3 () ĊĠĠĠĠĠĠĠ Ġoutput [ 0 ] Ġ= Ġthis . vector [ 0 ] Ġ+ Ġ( sum mand [ 0 ] Ġ* Ġamount To Scale ) ĊĠĠĠĠĠĠĠ Ġoutput [ 1 ] Ġ= Ġthis . vector [ 1 ] Ġ+ Ġ( sum mand [ 1 ] Ġ* Ġamount To Scale ) ĊĠĠĠĠĠĠĠ Ġoutput [ 2 ] Ġ= Ġthis . vector [ 2 ] Ġ+ Ġ( sum mand [ 2 ] Ġ* Ġamount To Scale ) ĊĠĠĠĠĠĠĠ Ġreturn Ġoutput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalculates Ġthe Ġeu cl id ian Ġdistance Ġbetween Ġtwo ĠVec 3 's ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġfirst Operand Ġthe Ġfirst Ġoperand ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġsecond Operand Ġthe Ġsecond Ġoperand ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Number } Ġdistance Ġbetween Ġfirst Operand Ġand Ġsecond Operand ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdistance ( operand : ĠVec 3 ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġthis . vector [ 0 ] Ġ- Ġoperand [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġthis . vector [ 1 ] Ġ- Ġoperand [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġz Ġ= Ġthis . vector [ 2 ] Ġ- Ġoperand [ 2 ] ĊĠĠĠĠĠĠĠ Ġreturn ĠMath . sqrt ( x Ġ* Ġx Ġ+ Ġy Ġ* Ġy Ġ+ Ġz Ġ* Ġz ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalculates Ġthe Ġsquared Ġeu cl id ian Ġdistance Ġbetween Ġtwo ĠVec 3 's ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġfirst Operand Ġthe Ġfirst Ġoperand ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġsecond Operand Ġthe Ġsecond Ġoperand ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Number } Ġsquared Ġdistance Ġbetween Ġfirst Operand Ġand Ġsecond Operand ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsquared Distance ( operand : ĠVec 3 ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġthis . vector [ 0 ] Ġ- Ġoperand [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġthis . vector [ 1 ] Ġ- Ġoperand [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġz Ġ= Ġthis . vector [ 2 ] Ġ- Ġoperand [ 2 ] ĊĠĠĠĠĠĠĠ Ġreturn Ġx Ġ* Ġx Ġ+ Ġy Ġ* Ġy Ġ+ Ġz Ġ* Ġz ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalculates Ġthe Ġsquared Ġlength Ġof Ġvec 3 To Calculate Squared Length ĠVec 3 ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġvec 3 To Calculate Squared Length Ġvector Ġto Ġcalculate Ġsquared Ġlength Ġof ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Number } Ġsquared Ġlength Ġof Ġvec 3 To Calculate Squared Length ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsquared Length (): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġthis . vector [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġthis . vector [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġz Ġ= Ġthis . vector [ 2 ] ĊĠĠĠĠĠĠĠ Ġreturn Ġx Ġ* Ġx Ġ+ Ġy Ġ* Ġy Ġ+ Ġz Ġ* Ġz ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNeg ates Ġthe Ġcomponents Ġof Ġvec 3 To Neg ate ĠVec 3 ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out Ġthe Ġreceiving Ġvector ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġvec 3 To Neg ate Ġvector Ġto Ġneg ate ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġneg ate (): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠVec 3 () ĊĠĠĠĠĠĠĠ Ġoutput [ 0 ] Ġ= Ġ- this . vector [ 0 ] ĊĠĠĠĠĠĠĠ Ġoutput [ 1 ] Ġ= Ġ- this . vector [ 1 ] ĊĠĠĠĠĠĠĠ Ġoutput [ 2 ] Ġ= Ġ- this . vector [ 2 ] ĊĠĠĠĠĠĠĠ Ġreturn Ġoutput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġinverse Ġof Ġthe Ġcomponents Ġof Ġvec 3 To Invert ĠVec 3 ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out Ġthe Ġreceiving Ġvector ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġvec 3 To Invert Ġvector Ġto Ġinvert ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinverse (): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠVec 3 () ĊĠĠĠĠĠĠĠ Ġoutput [ 0 ] Ġ= Ġ 1 . 0 Ġ/ Ġthis . vector [ 0 ] ĊĠĠĠĠĠĠĠ Ġoutput [ 1 ] Ġ= Ġ 1 . 0 Ġ/ Ġthis . vector [ 1 ] ĊĠĠĠĠĠĠĠ Ġoutput [ 2 ] Ġ= Ġ 1 . 0 Ġ/ Ġthis . vector [ 2 ] ĊĠĠĠĠĠĠĠ Ġreturn Ġoutput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNormalize Ġvec 3 To Normalize ĠVec 3 ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out Ġthe Ġreceiving Ġvector ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġvec 3 To Normalize Ġvector Ġto Ġnormalize ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnormalize (): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠVec 3 () ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġthis . vector [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġthis . vector [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġz Ġ= Ġthis . vector [ 2 ] ĊĠĠĠĠĠĠĠ Ġvar Ġlen Ġ= Ġx Ġ* Ġx Ġ+ Ġy Ġ* Ġy Ġ+ Ġz Ġ* Ġz ĊĠĠĠĠĠĠĠ Ġif Ġ( len Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO : Ġevaluate Ġuse Ġof Ġglm _ in vs qrt Ġhere ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlen Ġ= Ġ 1 Ġ/ ĠMath . sqrt ( len ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput [ 0 ] Ġ= Ġthis . vector [ 0 ] Ġ* Ġlen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput [ 1 ] Ġ= Ġthis . vector [ 1 ] Ġ* Ġlen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput [ 2 ] Ġ= Ġthis . vector [ 2 ] Ġ* Ġlen ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġoutput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalculates Ġthe Ġdot Ġproduct Ġof Ġtwo ĠVec 3 's ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġfirst Operand Ġthe Ġfirst Ġoperand ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġsecond Operand Ġthe Ġsecond Ġoperand ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Number } Ġdot Ġproduct Ġof Ġfirst Operand Ġand Ġsecond Operand ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdot ( operand : ĠVec 3 ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . vector [ 0 ] Ġ* Ġoperand [ 0 ] Ġ+ Ġthis . vector [ 1 ] Ġ* Ġoperand [ 1 ] Ġ+ Ġthis . vector [ 2 ] Ġ* Ġoperand [ 2 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComputes Ġthe Ġcross Ġproduct Ġof Ġtwo ĠVec 3 's ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out Ġthe Ġreceiving Ġvector ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġfirst Operand Ġthe Ġfirst Ġoperand ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġsecond Operand Ġthe Ġsecond Ġoperand ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcross ( operand : ĠVec 3 ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠVec 3 () ĊĠĠĠĠĠĠĠ Ġval Ġax Ġ= Ġthis . vector [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġay Ġ= Ġthis . vector [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġaz Ġ= Ġthis . vector [ 2 ] ĊĠĠĠĠĠĠĠ Ġval Ġbx Ġ= Ġoperand [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġby Ġ= Ġoperand [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġb z Ġ= Ġoperand [ 2 ] ĊĠĠĠĠĠĠĠ Ġoutput [ 0 ] Ġ= Ġay Ġ* Ġb z Ġ- Ġaz Ġ* Ġby ĊĠĠĠĠĠĠĠ Ġoutput [ 1 ] Ġ= Ġaz Ġ* Ġbx Ġ- Ġax Ġ* Ġb z ĊĠĠĠĠĠĠĠ Ġoutput [ 2 ] Ġ= Ġax Ġ* Ġby Ġ- Ġay Ġ* Ġbx ĊĠĠĠĠĠĠĠ Ġreturn Ġoutput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPerforms Ġa Ġlinear Ġinterpolation Ġbetween Ġtwo ĠVec 3 's ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out Ġthe Ġreceiving Ġvector ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġfirst Operand Ġthe Ġfirst Ġoperand ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġsecond Operand Ġthe Ġsecond Ġoperand ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Number } Ġinterpolation Amount Ġinterpolation Ġamount Ġbetween Ġthe Ġtwo Ġinputs ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġl erp ( operand : ĠVec 3 , Ġinterpolation Amount : ĠDouble ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠVec 3 () ĊĠĠĠĠĠĠĠ Ġval Ġax Ġ= Ġthis . vector [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġay Ġ= Ġthis . vector [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġaz Ġ= Ġthis . vector [ 2 ] ĊĠĠĠĠĠĠĠ Ġoutput [ 0 ] Ġ= Ġax Ġ+ Ġinterpolation Amount Ġ* Ġ( operand [ 0 ] Ġ- Ġax ) ĊĠĠĠĠĠĠĠ Ġoutput [ 1 ] Ġ= Ġay Ġ+ Ġinterpolation Amount Ġ* Ġ( operand [ 1 ] Ġ- Ġay ) ĊĠĠĠĠĠĠĠ Ġoutput [ 2 ] Ġ= Ġaz Ġ+ Ġinterpolation Amount Ġ* Ġ( operand [ 2 ] Ġ- Ġaz ) ĊĠĠĠĠĠĠĠ Ġreturn Ġoutput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPerforms Ġa Ġh erm ite Ġinterpolation Ġwith Ġtwo Ġcontrol Ġpoints ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out Ġthe Ġreceiving Ġvector ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġ` this . vector ` Ġthe Ġfirst Ġoperand ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġfirst Operand Ġthe Ġsecond Ġoperand ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġsecond Operand Ġthe Ġthird Ġoperand ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġthird Operand Ġthe Ġfourth Ġoperand ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Number } Ġinterpolation Amount Ġinterpolation Ġamount Ġbetween Ġthe Ġtwo Ġinputs ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġh erm ite ( first Operand : ĠVec 3 , Ġsecond Operand : ĠVec 3 , Ġthird Operand : ĠVec 3 , Ġinterpolation Amount : ĠDouble ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠVec 3 () ĊĠĠĠĠĠĠĠ Ġval Ġfactor Times 2 Ġ= Ġinterpolation Amount Ġ* Ġinterpolation Amount ĊĠĠĠĠĠĠĠ Ġval Ġfactor 1 Ġ= Ġfactor Times 2 Ġ* Ġ( 2 Ġ* Ġinterpolation Amount Ġ- Ġ 3 ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġfactor 2 Ġ= Ġfactor Times 2 Ġ* Ġ( interpolation Amount Ġ- Ġ 2 ) Ġ+ Ġinterpolation Amount ĊĠĠĠĠĠĠĠ Ġval Ġfactor 3 Ġ= Ġfactor Times 2 Ġ* Ġ( interpolation Amount Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġfactor 4 Ġ= Ġfactor Times 2 Ġ* Ġ( 3 Ġ- Ġ 2 Ġ* Ġinterpolation Amount ) ĊĠĠĠĠĠĠĠ Ġoutput [ 0 ] Ġ= Ġthis . vector [ 0 ] Ġ* Ġfactor 1 Ġ+ Ġfirst Operand [ 0 ] Ġ* Ġfactor 2 Ġ+ Ġsecond Operand [ 0 ] Ġ* Ġfactor 3 Ġ+ Ġthird Operand [ 0 ] Ġ* Ġfactor 4 ĊĠĠĠĠĠĠĠ Ġoutput [ 1 ] Ġ= Ġthis . vector [ 1 ] Ġ* Ġfactor 1 Ġ+ Ġfirst Operand [ 1 ] Ġ* Ġfactor 2 Ġ+ Ġsecond Operand [ 1 ] Ġ* Ġfactor 3 Ġ+ Ġthird Operand [ 1 ] Ġ* Ġfactor 4 ĊĠĠĠĠĠĠĠ Ġoutput [ 2 ] Ġ= Ġthis . vector [ 2 ] Ġ* Ġfactor 1 Ġ+ Ġfirst Operand [ 2 ] Ġ* Ġfactor 2 Ġ+ Ġsecond Operand [ 2 ] Ġ* Ġfactor 3 Ġ+ Ġthird Operand [ 2 ] Ġ* Ġfactor 4 ĊĠĠĠĠĠĠĠ Ġreturn Ġoutput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPerforms Ġa Ġbe zier Ġinterpolation Ġwith Ġtwo Ġcontrol Ġpoints ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out Ġthe Ġreceiving Ġvector ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġ` this . vector ` Ġthe Ġfirst Ġoperand ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġfirst Operand Ġthe Ġsecond Ġoperand ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġsecond Operand Ġthe Ġthird Ġoperand ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġthird Operand Ġthe Ġfourth Ġoperand ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Number } Ġinterpolation Amount Ġinterpolation Ġamount Ġbetween Ġthe Ġtwo Ġinputs ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbe zier ( first Operand : ĠVec 3 , Ġsecond Operand : ĠVec 3 , Ġthird Operand : ĠVec 3 , Ġinterpolation Amount : ĠDouble ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠVec 3 () ĊĠĠĠĠĠĠĠ Ġval Ġinverse Factor Ġ= Ġ 1 Ġ- Ġinterpolation Amount ĊĠĠĠĠĠĠĠ Ġval Ġinverse Factor Times Two Ġ= Ġinverse Factor Ġ* Ġinverse Factor ĊĠĠĠĠĠĠĠ Ġval Ġfactor Times 2 Ġ= Ġinterpolation Amount Ġ* Ġinterpolation Amount ĊĠĠĠĠĠĠĠ Ġval Ġfactor 1 Ġ= Ġinverse Factor Times Two Ġ* Ġinverse Factor ĊĠĠĠĠĠĠĠ Ġval Ġfactor 2 Ġ= Ġ 3 Ġ* Ġinterpolation Amount Ġ* Ġinverse Factor Times Two ĊĠĠĠĠĠĠĠ Ġval Ġfactor 3 Ġ= Ġ 3 Ġ* Ġfactor Times 2 Ġ* Ġinverse Factor ĊĠĠĠĠĠĠĠ Ġval Ġfactor 4 Ġ= Ġfactor Times 2 Ġ* Ġinterpolation Amount ĊĠĠĠĠĠĠĠ Ġoutput [ 0 ] Ġ= Ġthis . vector [ 0 ] Ġ* Ġfactor 1 Ġ+ Ġfirst Operand [ 0 ] Ġ* Ġfactor 2 Ġ+ Ġsecond Operand [ 0 ] Ġ* Ġfactor 3 Ġ+ Ġthird Operand [ 0 ] Ġ* Ġfactor 4 ĊĠĠĠĠĠĠĠ Ġoutput [ 1 ] Ġ= Ġthis . vector [ 1 ] Ġ* Ġfactor 1 Ġ+ Ġfirst Operand [ 1 ] Ġ* Ġfactor 2 Ġ+ Ġsecond Operand [ 1 ] Ġ* Ġfactor 3 Ġ+ Ġthird Operand [ 1 ] Ġ* Ġfactor 4 ĊĠĠĠĠĠĠĠ Ġoutput [ 2 ] Ġ= Ġthis . vector [ 2 ] Ġ* Ġfactor 1 Ġ+ Ġfirst Operand [ 2 ] Ġ* Ġfactor 2 Ġ+ Ġsecond Operand [ 2 ] Ġ* Ġfactor 3 Ġ+ Ġthird Operand [ 2 ] Ġ* Ġfactor 4 ĊĠĠĠĠĠĠĠ Ġreturn Ġoutput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGenerates Ġa Ġrandom Ġvector Ġwith Ġthe Ġgiven Ġvector Scale ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out Ġthe Ġreceiving Ġvector ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Number } Ġ[ vector Scale ] ĠLength Ġof Ġthe Ġresulting Ġvector . ĠIf Ġom mitted , Ġa Ġunit Ġvector Ġwill Ġbe Ġreturned ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrandom ( vector Scale : ĠDouble Ġ= Ġ 1 . 0 ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠVec 3 () ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= ĠR AN DOM Ġ* Ġ 2 . 0 Ġ* ĠMath . PI ĊĠĠĠĠĠĠĠ Ġval Ġz Ġ= Ġ( RANDOM Ġ* Ġ 2 . 0 ) Ġ- Ġ 1 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġz Scale Ġ= ĠMath . sqrt ( 1 . 0 Ġ- Ġz Ġ* Ġz ) Ġ* Ġvector Scale ĊĠĠĠĠĠĠĠ Ġoutput [ 0 ] Ġ= ĠMath . cos ( r ) Ġ* Ġz Scale ĊĠĠĠĠĠĠĠ Ġoutput [ 1 ] Ġ= ĠMath . sin ( r ) Ġ* Ġz Scale ĊĠĠĠĠĠĠĠ Ġoutput [ 2 ] Ġ= Ġz Ġ* Ġvector Scale ĊĠĠĠĠĠĠĠ Ġreturn Ġoutput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrans forms Ġthe ĠVec 3 Ġwith Ġvec 3 To Transform ĠMat 4 . ĊĠĠĠĠ Ġ* Ġ 4 th Ġvector Ġcomponent Ġis Ġimplicitly Ġ' 1 ' ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out Ġthe Ġreceiving Ġvector ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġvec 3 To Transform Ġthe Ġvector Ġto Ġtransform ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Mat 4 } Ġmat 4 To Transform With Ġmatrix Ġto Ġtransform Ġwith ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtransform Mat 4 ( mat 4 To Transform With : ĠDouble Array ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠVec 3 () ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġthis . vector [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġthis . vector [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġz Ġ= Ġthis . vector [ 2 ] ĊĠĠĠĠĠĠĠ Ġvar Ġw Ġ= Ġmat 4 To Transform With [ 3 ] Ġ* Ġx Ġ+ Ġmat 4 To Transform With [ 7 ] Ġ* Ġy Ġ+ Ġmat 4 To Transform With [ 1 1 ] Ġ* Ġz Ġ+ Ġmat 4 To Transform With [ 1 5 ] ĊĠĠĠĠĠĠĠ Ġif Ġ( w Ġ< Ġ 0 Ġ|| Ġw Ġ> Ġ 1 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġw Ġ= Ġ 1 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoutput [ 0 ] Ġ= Ġ( mat 4 To Transform With [ 0 ] Ġ* Ġx Ġ+ Ġmat 4 To Transform With [ 4 ] Ġ* Ġy Ġ+ Ġmat 4 To Transform With [ 8 ] Ġ* Ġz Ġ+ Ġmat 4 To Transform With [ 1 2 ]) Ġ/ Ġw ĊĠĠĠĠĠĠĠ Ġoutput [ 1 ] Ġ= Ġ( mat 4 To Transform With [ 1 ] Ġ* Ġx Ġ+ Ġmat 4 To Transform With [ 5 ] Ġ* Ġy Ġ+ Ġmat 4 To Transform With [ 9 ] Ġ* Ġz Ġ+ Ġmat 4 To Transform With [ 1 3 ]) Ġ/ Ġw ĊĠĠĠĠĠĠĠ Ġoutput [ 2 ] Ġ= Ġ( mat 4 To Transform With [ 2 ] Ġ* Ġx Ġ+ Ġmat 4 To Transform With [ 6 ] Ġ* Ġy Ġ+ Ġmat 4 To Transform With [ 1 0 ] Ġ* Ġz Ġ+ Ġmat 4 To Transform With [ 1 4 ]) Ġ/ Ġw ĊĠĠĠĠĠĠĠ Ġreturn Ġoutput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtransform Mat 4 ( m : ĠMat 4 ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtransform Mat 4 ( m . toDouble Array ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrans forms Ġthe ĠVec 3 Ġwith Ġvec 3 To Transform ĠMat 3 . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Mat 3 } Ġmat 3 To Transform With Ġthe Ġ 3 x 3 Ġmatrix Ġto Ġtransform Ġwith ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtransform Mat 3 ( mat 3 To Transform With : ĠDouble Array ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠVec 3 () ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġthis . vector [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġthis . vector [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġz Ġ= Ġthis . vector [ 2 ] ĊĠĠĠĠĠĠĠ Ġoutput [ 0 ] Ġ= Ġx Ġ* Ġmat 3 To Transform With [ 0 ] Ġ+ Ġy Ġ* Ġmat 3 To Transform With [ 3 ] Ġ+ Ġz Ġ* Ġmat 3 To Transform With [ 6 ] ĊĠĠĠĠĠĠĠ Ġoutput [ 1 ] Ġ= Ġx Ġ* Ġmat 3 To Transform With [ 1 ] Ġ+ Ġy Ġ* Ġmat 3 To Transform With [ 4 ] Ġ+ Ġz Ġ* Ġmat 3 To Transform With [ 7 ] ĊĠĠĠĠĠĠĠ Ġoutput [ 2 ] Ġ= Ġx Ġ* Ġmat 3 To Transform With [ 2 ] Ġ+ Ġy Ġ* Ġmat 3 To Transform With [ 5 ] Ġ+ Ġz Ġ* Ġmat 3 To Transform With [ 8 ] ĊĠĠĠĠĠĠĠ Ġreturn Ġoutput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrans forms Ġthe ĠVec 3 Ġwith Ġvec 3 To Transform ĠQu at ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out Ġthe Ġreceiving Ġvector ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġvec 3 To Transform Ġthe Ġvector Ġto Ġtransform ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Qu at } Ġquat To Transform With Ġquaternion Ġto Ġtransform Ġwith ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtransform Qu at ( quat To Transform With : ĠQu at ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġbenchmarks : Ġhttp :// jsp er f . com / qu aternion - transform - vec 3 - implement ations ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠVec 3 () ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġthis . vector [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġthis . vector [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġz Ġ= Ġthis . vector [ 2 ] ĊĠĠĠĠĠĠĠ Ġval Ġq x Ġ= Ġquat To Transform With [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġq y Ġ= Ġquat To Transform With [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġq z Ġ= Ġquat To Transform With [ 2 ] ĊĠĠĠĠĠĠĠ Ġval Ġqw Ġ= Ġquat To Transform With [ 3 ] ĊĠĠĠĠĠĠĠ Ġ// Ġcalculate ĠQu at Ġ* Ġvec ĊĠĠĠĠĠĠĠ Ġval Ġix Ġ= Ġqw Ġ* Ġx Ġ+ Ġq y Ġ* Ġz Ġ- Ġq z Ġ* Ġy ĊĠĠĠĠĠĠĠ Ġval Ġiy Ġ= Ġqw Ġ* Ġy Ġ+ Ġq z Ġ* Ġx Ġ- Ġq x Ġ* Ġz ĊĠĠĠĠĠĠĠ Ġval Ġiz Ġ= Ġqw Ġ* Ġz Ġ+ Ġq x Ġ* Ġy Ġ- Ġq y Ġ* Ġx ĊĠĠĠĠĠĠĠ Ġval Ġiw Ġ= Ġ- qx Ġ* Ġx Ġ- Ġq y Ġ* Ġy Ġ- Ġq z Ġ* Ġz ĊĠĠĠĠĠĠĠ Ġ// Ġcalculate Ġresult Ġ* Ġinverse ĠQu at ĊĠĠĠĠĠĠĠ Ġoutput [ 0 ] Ġ= Ġix Ġ* Ġqw Ġ+ Ġiw Ġ* Ġ- qx Ġ+ Ġiy Ġ* Ġ- qz Ġ- Ġiz Ġ* Ġ- qy ĊĠĠĠĠĠĠĠ Ġoutput [ 1 ] Ġ= Ġiy Ġ* Ġqw Ġ+ Ġiw Ġ* Ġ- qy Ġ+ Ġiz Ġ* Ġ- qx Ġ- Ġix Ġ* Ġ- qz ĊĠĠĠĠĠĠĠ Ġoutput [ 2 ] Ġ= Ġiz Ġ* Ġqw Ġ+ Ġiw Ġ* Ġ- qz Ġ+ Ġix Ġ* Ġ- qy Ġ- Ġiy Ġ* Ġ- qx ĊĠĠĠĠĠĠĠ Ġreturn Ġoutput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRotate Ġvec 3 To Rotate Ġ 3 D Ġvector Ġaround Ġthe Ġx - axis ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out ĠThe Ġreceiving ĠVec 3 ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġvec 3 To Rotate ĠThe ĠVec 3 Ġpoint Ġto Ġrotate ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġorigin Of Rotation ĠThe Ġorigin Ġof Ġthe Ġrotation ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Number } Ġangle In Rad ĠThe Ġangle Ġof Ġrotation ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠrotateX ( origin Of Rotation : ĠArray < Double >, Ġangle In Rad : ĠDouble ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠVec 3 () ĊĠĠĠĠĠĠĠ Ġ// Translate Ġpoint Ġto Ġthe Ġorigin ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( this . vector [ 0 ] Ġ- Ġorigin Of Rotation [ 0 ]), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( this . vector [ 1 ] Ġ- Ġorigin Of Rotation [ 1 ]), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( this . vector [ 2 ] Ġ- Ġorigin Of Rotation [ 2 ]) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// perform Ġrotation ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( p [ 1 ] Ġ* ĠMath . cos ( angle In Rad ) Ġ- Ġp [ 2 ] Ġ* ĠMath . sin ( angle In Rad )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( p [ 1 ] Ġ* ĠMath . sin ( angle In Rad ) Ġ+ Ġp [ 2 ] Ġ* ĠMath . cos ( angle In Rad )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// translate Ġto Ġcorrect Ġposition ĊĠĠĠĠĠĠĠ Ġoutput [ 0 ] Ġ= Ġr [ 0 ] Ġ+ Ġorigin Of Rotation [ 0 ] ĊĠĠĠĠĠĠĠ Ġoutput [ 1 ] Ġ= Ġr [ 1 ] Ġ+ Ġorigin Of Rotation [ 1 ] ĊĠĠĠĠĠĠĠ Ġoutput [ 2 ] Ġ= Ġr [ 2 ] Ġ+ Ġorigin Of Rotation [ 2 ] ĊĠĠĠĠĠĠĠ Ġreturn Ġoutput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRotate Ġvec 3 To Rotate Ġ 3 D Ġvector Ġaround Ġthe Ġy - axis ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out ĠThe Ġreceiving ĠVec 3 ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġvec 3 To Rotate ĠThe ĠVec 3 Ġpoint Ġto Ġrotate ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġorigin Of Rotation ĠThe Ġorigin Ġof Ġthe Ġrotation ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Number } Ġangle In Rad ĠThe Ġangle Ġof Ġrotation ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠrotateY ( origin Of Rotation : ĠArray < Double >, Ġangle In Rad : ĠDouble ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠVec 3 () ĊĠĠĠĠĠĠĠ Ġ// Translate Ġpoint Ġto Ġthe Ġorigin ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( this . vector [ 0 ] Ġ- Ġorigin Of Rotation [ 0 ]), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( this . vector [ 1 ] Ġ- Ġorigin Of Rotation [ 1 ]), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( this . vector [ 2 ] Ġ- Ġorigin Of Rotation [ 2 ]) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// perform Ġrotation ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( p [ 2 ] Ġ* ĠMath . sin ( angle In Rad ) Ġ+ Ġp [ 0 ] Ġ* ĠMath . cos ( angle In Rad )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp [ 1 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( p [ 2 ] Ġ* ĠMath . cos ( angle In Rad ) Ġ- Ġp [ 0 ] Ġ* ĠMath . sin ( angle In Rad )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// translate Ġto Ġcorrect Ġposition ĊĠĠĠĠĠĠĠ Ġoutput [ 0 ] Ġ= Ġr [ 0 ] Ġ+ Ġorigin Of Rotation [ 0 ] ĊĠĠĠĠĠĠĠ Ġoutput [ 1 ] Ġ= Ġr [ 1 ] Ġ+ Ġorigin Of Rotation [ 1 ] ĊĠĠĠĠĠĠĠ Ġoutput [ 2 ] Ġ= Ġr [ 2 ] Ġ+ Ġorigin Of Rotation [ 2 ] ĊĠĠĠĠĠĠĠ Ġreturn Ġoutput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRotate Ġvec 3 To Rotate Ġ 3 D Ġvector Ġaround Ġthe Ġz - axis ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġin Out ĠThe Ġreceiving ĠVec 3 ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġvec 3 To Rotate ĠThe ĠVec 3 Ġpoint Ġto Ġrotate ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġorigin Of Rotation ĠThe Ġorigin Ġof Ġthe Ġrotation ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Number } Ġangle In Rad ĠThe Ġangle Ġof Ġrotation ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Vec 3 } Ġin Out ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠrotateZ ( origin Of Rotation : ĠArray < Double >, Ġangle In Rad : ĠDouble ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠVec 3 () ĊĠĠĠĠĠĠĠ Ġ// Translate Ġpoint Ġto Ġthe Ġorigin ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( this . vector [ 0 ] Ġ- Ġorigin Of Rotation [ 0 ]), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( this . vector [ 1 ] Ġ- Ġorigin Of Rotation [ 1 ]), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( this . vector [ 2 ] Ġ- Ġorigin Of Rotation [ 2 ]) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// perform Ġrotation ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( p [ 0 ] Ġ* ĠMath . cos ( angle In Rad ) Ġ- Ġp [ 1 ] Ġ* ĠMath . sin ( angle In Rad )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( p [ 0 ] Ġ* ĠMath . sin ( angle In Rad ) Ġ+ Ġp [ 1 ] Ġ* ĠMath . cos ( angle In Rad )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp [ 2 ] ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// translate Ġto Ġcorrect Ġposition ĊĠĠĠĠĠĠĠ Ġoutput [ 0 ] Ġ= Ġr [ 0 ] Ġ+ Ġorigin Of Rotation [ 0 ] ĊĠĠĠĠĠĠĠ Ġoutput [ 1 ] Ġ= Ġr [ 1 ] Ġ+ Ġorigin Of Rotation [ 1 ] ĊĠĠĠĠĠĠĠ Ġoutput [ 2 ] Ġ= Ġr [ 2 ] Ġ+ Ġorigin Of Rotation [ 2 ] ĊĠĠĠĠĠĠĠ Ġreturn Ġoutput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġangle Ġbetween Ġtwo Ġ 3 D Ġvectors ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġfirst Vec 3 ĠThe Ġfirst Ġoperand ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġsecond Vec 3 ĠThe Ġsecond Ġoperand ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Number } ĠThe Ġangle Ġin Ġradians ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġangle ( vector : ĠVec 3 ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtemp A Ġ= ĠVec 3 ( this . vector [ 0 ], Ġthis . vector [ 1 ], Ġthis . vector [ 2 ]). normalize () ĊĠĠĠĠĠĠĠ Ġval Ġtemp B Ġ= ĠVec 3 ( vector [ 0 ], Ġvector [ 1 ], Ġvector [ 2 ]). normalize () ĊĠĠĠĠĠĠĠ Ġval Ġcos ine Ġ= Ġtemp A . dot ( temp B ) ĊĠĠĠĠĠĠĠ Ġif Ġ( cos ine Ġ> Ġ 1 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( cos ine Ġ< Ġ- 1 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMath . PI ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMath . acos ( cos ine ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġstring Ġrepresentation Ġof Ġa Ġvector ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġa Ġvector Ġto Ġrepresent Ġas Ġa Ġstring ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ String } Ġstring Ġrepresentation Ġof Ġthe Ġvector ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Vec 3 (${ this . vector [ 0 ]}, Ġ${ this . vector [ 1 ]}, Ġ${ this . vector [ 2 ]}) " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġwhether Ġor Ġnot Ġthe Ġvectors Ġhave Ġexactly Ġthe Ġsame Ġelements Ġin Ġthe Ġsame Ġposition Ġ( when Ġcompared Ġwith Ġ=== ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġfirst Vector ĠThe Ġfirst Ġvector . ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġsecond Vector ĠThe Ġsecond Ġvector . ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Boolean } ĠTrue Ġif Ġthe Ġvectors Ġare Ġequal , Ġfalse Ġotherwise . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġexact Equals ( vector : ĠVec 3 ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . vector [ 0 ] Ġ== Ġvector [ 0 ] Ġ&& Ġthis . vector [ 1 ] Ġ== Ġvector [ 1 ] Ġ&& Ġthis . vector [ 2 ] Ġ== Ġvector [ 2 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġwhether Ġor Ġnot Ġthe Ġvectors Ġhave Ġapproximately Ġthe Ġsame Ġelements Ġin Ġthe Ġsame Ġposition . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġfirst Vector ĠThe Ġfirst Ġvector . ĊĠĠĠĠ Ġ* Ġ@ param Ġ{ Vec 3 } Ġsecond Vector ĠThe Ġsecond Ġvector . ĊĠĠĠĠ Ġ* Ġ@ returns Ġ{ Boolean } ĠTrue Ġif Ġthe Ġvectors Ġare Ġequal , Ġfalse Ġotherwise . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġequals ( vector : ĠVec 3 ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa 0 Ġ= Ġthis . vector [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġa 1 Ġ= Ġthis . vector [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġa 2 Ġ= Ġthis . vector [ 2 ] ĊĠĠĠĠĠĠĠ Ġval Ġb 0 Ġ= Ġvector [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġb 1 Ġ= Ġvector [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġb 2 Ġ= Ġvector [ 2 ] ĊĠĠĠĠĠĠĠ Ġreturn Ġ( Math . abs ( a 0 Ġ- Ġb 0 ) Ġ<= ĠEPS ILON Ġ* ĠMath . max ( 1 . 0 , ĠMath . abs ( a 0 ), ĠMath . abs ( b 0 )) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMath . abs ( a 1 Ġ- Ġb 1 ) Ġ<= ĠEPS ILON Ġ* ĠMath . max ( 1 . 0 , ĠMath . abs ( a 1 ), ĠMath . abs ( b 1 )) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMath . abs ( a 2 Ġ- Ġb 2 ) Ġ<= ĠEPS ILON Ġ* ĠMath . max ( 1 . 0 , ĠMath . abs ( a 2 ), ĠMath . abs ( b 2 ))) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthis Ġvector Ġto Ġthe Ġposition Ġelements Ġof Ġthe Ġtransformation Ġmatrix Ġm . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset From Matrix Position ( m : ĠMat 4 ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . set ( m . get Translation ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset ( x : ĠDouble , Ġy : ĠDouble , Ġz : ĠDouble ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġx ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġy ĊĠĠĠĠĠĠĠ Ġthis . z Ġ= Ġz ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset ( v : ĠVec 3 ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġv . x ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġv . y ĊĠĠĠĠĠĠĠ Ġthis . z Ġ= Ġv . z ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} Ċ } Ċ