package Ġhr . fer . zem ris . math . vector Ċ Ċ import Ġhr . fer . zem ris . math . exceptions . Cross Product In compatibility Exception Ċ import Ġhr . fer . zem ris . math . exceptions . In compatible Vectors Exception Ċ import Ġhr . fer . zem ris . math . exceptions . Vectors Cannot Have Zero Dimension Ċ import Ġhr . fer . zem ris . math . matrix . Matrix Ċ import Ġhr . fer . zem ris . math . util . matrix Ċ import Ġhr . fer . zem ris . math . util . row Ċ import Ġjava . lang . Index OutOfBoundsException Ċ import Ġkotlin . math . pow Ċ import Ġkotlin . math . sqrt Ċ Ċ private Ġconst Ġval ĠC ROSS _ PRODUCT _ DIMENSION Ġ= Ġ 3 Ċ Ċ open Ġclass ĠVector ( ĊĠĠĠ Ġprivate Ġval Ġvalues : ĠDouble Array Ċ ) Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( values . isEmpty ()) Ġthrow ĠVector s Cannot Have Zero Dimension () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġdimension Ġ= Ġvalues . size ĊĊĠĠĠ Ġval Ġnorm Ġ= Ġnorm () ĊĊĠĠĠ Ġoperator Ġfun Ġget ( index : ĠInt ): ĠDouble Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ>= Ġdimension ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIndex OutOfBoundsException (" Vector Ġindex Ġ$ index Ġis Ġout Ġof Ġbounds Ġ[ 0 , Ġ${ values . size Ġ- Ġ 1 }] ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues [ index ] ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġplus ( other : ĠVector ) Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( dimension Ġ!= Ġother . dimension ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIn compatible Vectors Exception ( dimension , Ġother . dimension ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVector ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDouble Array ( dimension ) Ġ{ Ġi Ġ-> Ġthis [ i ] Ġ+ Ġother [ i ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġminus ( other : ĠVector ) Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( dimension Ġ!= Ġother . dimension ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIn compatible Vectors Exception ( dimension , Ġother . dimension ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVector ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDouble Array ( dimension ) Ġ{ Ġi Ġ-> Ġthis [ i ] Ġ- Ġother [ i ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġtimes ( factor : ĠDouble ) Ġ= ĊĠĠĠĠĠĠĠ ĠVector ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDouble Array ( dimension ) Ġ{ Ġi Ġ-> Ġthis [ i ] Ġ* Ġfactor Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġoperator Ġfun Ġtimes ( other : ĠVector ): ĠDouble Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( dimension Ġ!= Ġother . dimension ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIn compatible Vectors Exception ( dimension , Ġother . dimension ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . zip ( other . values ) Ġ{ Ġv 1 , Ġv 2 Ġ-> Ġv 1 Ġ* Ġv 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fold ( 0 . 0 ) Ġ{ Ġaccumulated , Ġcurrent Value Ġ-> Ġaccumulated Ġ+ Ġcurrent Value Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġis Ġvector Ġcross Ġproduct ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġin fix Ġfun Ġx ( other : ĠVector ) Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( dimension Ġ!= ĠC ROSS _ PRODUCT _ DIMENSION Ġ|| Ġother . dimension Ġ!= ĠC ROSS _ PRODUCT _ DIMENSION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠCross Product In compatibility Exception ( dimension , Ġother . dimension ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVector ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdouble ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 1 ] Ġ* Ġother [ 2 ] Ġ- Ġthis [ 2 ] Ġ* Ġother [ 1 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 2 ] Ġ* Ġother [ 0 ] Ġ- Ġthis [ 0 ] Ġ* Ġother [ 2 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 ] Ġ* Ġother [ 1 ] Ġ- Ġthis [ 1 ] Ġ* Ġother [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalculates Ġcos ( l ) Ġ= Ġ( v 1 Ġ* Ġv 2 ) Ġ/ Ġ( | v 1 | Ġ* Ġ| v 2 |) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġin fix Ġfun Ġcos ( other : ĠVector ) Ġ= Ġ( this Ġ* Ġother ) Ġ/ Ġ( norm Ġ* Ġother . norm Ġ) ĊĊĊĠĠĠ Ġfun Ġnormalize () Ġ= Ġthis Ġ* Ġ( 1 . 0 f Ġ/ Ġnorm ) ĊĊĠĠĠ Ġfun Ġto Matrix ( to Matrix : ĠTo Matrix ) Ġ= ĊĠĠĠĠĠĠĠ Ġwhen ( to Matrix ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTo Matrix . ROW Ġ-> Ġmatrix ( row (* values )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTo Matrix . COLUMN Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMatrix ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArray ( dimension ) Ġ{ Ġi Ġ-> Ġdouble ArrayOf ( values [ i ]) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnorm () Ġ= ĊĠĠĠĠĠĠĠ Ġsqrt ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fold ( 0 . 0 ) Ġ{ Ġaccumulated , Ġcurrent Ġ-> Ġaccumulated Ġ+ Ġcurrent . pow ( 2 ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( other ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠVector Ġ-> Ġvalues . content Equals ( other . values ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . equals ( other ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . hashCode () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠTo Matrix Ġ{ ĊĠĠĠĠĠĠĠ ĠCOLUMN , ĠROW ĊĠĠĠ Ġ} Ċ } Ċ