package Ġeu . sis ik . add text to video . gl Ċ Ċ import Ġkotlin . math . sqrt Ċ Ċ /** Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 Ġby ĠRoman ĠS is ik . ĠAll Ġrights Ġreserved . Ċ Ġ*/ ĊĊ Ċ data Ġclass ĠVec 3 ( var Ġx : ĠFloat Ġ= Ġ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy : ĠFloat Ġ= Ġ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġz : ĠFloat Ġ= Ġ 0 f ) Ġ{ ĊĊĊĠĠĠ Ġoperator Ġfun Ġplus ( other : ĠVec 3 ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠVec 3 ( x Ġ+ Ġother . x , Ġy Ġ+ Ġother . y , Ġz Ġ+ Ġother . z ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġminus ( other : ĠVec 3 ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠVec 3 ( x Ġ- Ġother . x , Ġy Ġ- Ġother . y , Ġz Ġ- Ġother . z ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġtimes ( vec : ĠVec 3 ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠVec 3 ( x Ġ* Ġvec . x , Ġy Ġ* Ġvec . y , Ġz Ġ* Ġvec . z ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġtimes ( scalar : ĠFloat ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠVec 3 ( x Ġ* Ġscalar , Ġy Ġ* Ġscalar , Ġz Ġ* Ġscalar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġdiv ( scalar : ĠFloat ): ĠVec 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠVec 3 ( x Ġ/ Ġscalar , Ġy Ġ/ Ġscalar , Ġz Ġ/ Ġscalar ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġdistance ( first : ĠVec 3 , Ġsecond : ĠVec 3 ): ĠFloat Ġ{ ĊĠĠĠ Ġreturn Ġlength ( first Ġ- Ġsecond ) Ċ } Ċ Ċ fun Ġlength ( vec : ĠVec 3 ): ĠFloat Ġ{ ĊĠĠĠ Ġreturn Ġsqrt ( vec . x Ġ* Ġvec . x Ġ+ Ġvec . y Ġ* Ġvec . y Ġ+ Ġvec . z Ġ* Ġvec . z ) Ċ } Ċ Ċ fun Ġnormalize ( vec : ĠVec 3 ): ĠVec 3 Ġ{ ĊĠĠĠ Ġval Ġl Ġ= Ġlength ( vec ) ĊĠĠĠ Ġif Ġ( l Ġ== Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġreturn Ġvec ĊĊĠĠĠ Ġval Ġlr Ġ= Ġ 1 f Ġ/ Ġl ĊĠĠĠ Ġreturn Ġvec Ġ* Ġlr Ċ } Ċ Ċ fun Ġclamp ( vec : ĠVec 3 , Ġto Length : ĠFloat ): ĠVec 3 Ġ{ ĊĠĠĠ Ġval Ġl Ġ= Ġlength ( vec ) ĊĠĠĠ Ġreturn Ġif Ġ( l Ġ> Ġto Length ) Ġnormalize ( vec ) Ġ* Ġto Length Ġelse Ġvec Ċ }