package Ġdev . k drag 0 n . mon et . util Ċ Ċ import Ġkotlin . jvm . Jvm Inline Ċ Ċ @ Jvm Inline Ċ value Ġclass ĠMatrix 3 ( ĊĠĠĠ Ġval Ġvalues : ĠDouble Array , Ċ ) Ġ{ ĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġn 1 : ĠDouble , Ġn 2 : ĠDouble , Ġn 3 : ĠDouble , ĊĠĠĠĠĠĠĠ Ġn 4 : ĠDouble , Ġn 5 : ĠDouble , Ġn 6 : ĠDouble , ĊĠĠĠĠĠĠĠ Ġn 7 : ĠDouble , Ġn 8 : ĠDouble , Ġn 9 : ĠDouble , ĊĠĠĠ Ġ) Ġ: Ġthis ( double ArrayOf ( ĊĠĠĠĠĠĠĠ Ġn 1 , Ġn 2 , Ġn 3 , ĊĠĠĠĠĠĠĠ Ġn 4 , Ġn 5 , Ġn 6 , ĊĠĠĠĠĠĠĠ Ġn 7 , Ġn 8 , Ġn 9 , ĊĠĠĠ Ġ)) ĊĊĠĠĠ Ġoperator Ġfun Ġtimes ( vec : ĠVector 3 ) Ġ= Ġvalues . let Ġ{ Ġm Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġ( r 1 , Ġr 2 , Ġr 3 ) Ġ= Ġvec ĊĊĠĠĠĠĠĠĠ ĠVector 3 ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm [ 0 ]* r 1 Ġ+ Ġm [ 1 ]* r 2 Ġ+ Ġm [ 2 ]* r 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm [ 3 ]* r 1 Ġ+ Ġm [ 4 ]* r 2 Ġ+ Ġm [ 5 ]* r 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm [ 6 ]* r 1 Ġ+ Ġm [ 7 ]* r 2 Ġ+ Ġm [ 8 ]* r 3 , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġtimes ( matrix : ĠMatrix 3 ) Ġ= Ġvalues . let Ġ{ Ġlhs Ġ-> ĊĠĠĠĠĠĠĠ Ġmatrix . values . let Ġ{ Ġrhs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMatrix 3 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlhs [ 0 ] Ġ* Ġrhs [ 0 ] Ġ+ Ġlhs [ 3 ] Ġ* Ġrhs [ 1 ] Ġ+ Ġlhs [ 6 ] Ġ* Ġrhs [ 2 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlhs [ 1 ] Ġ* Ġrhs [ 0 ] Ġ+ Ġlhs [ 4 ] Ġ* Ġrhs [ 1 ] Ġ+ Ġlhs [ 7 ] Ġ* Ġrhs [ 2 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlhs [ 2 ] Ġ* Ġrhs [ 0 ] Ġ+ Ġlhs [ 5 ] Ġ* Ġrhs [ 1 ] Ġ+ Ġlhs [ 8 ] Ġ* Ġrhs [ 2 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlhs [ 0 ] Ġ* Ġrhs [ 3 ] Ġ+ Ġlhs [ 3 ] Ġ* Ġrhs [ 4 ] Ġ+ Ġlhs [ 6 ] Ġ* Ġrhs [ 5 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlhs [ 1 ] Ġ* Ġrhs [ 3 ] Ġ+ Ġlhs [ 4 ] Ġ* Ġrhs [ 4 ] Ġ+ Ġlhs [ 7 ] Ġ* Ġrhs [ 5 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlhs [ 2 ] Ġ* Ġrhs [ 3 ] Ġ+ Ġlhs [ 5 ] Ġ* Ġrhs [ 4 ] Ġ+ Ġlhs [ 8 ] Ġ* Ġrhs [ 5 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlhs [ 0 ] Ġ* Ġrhs [ 6 ] Ġ+ Ġlhs [ 3 ] Ġ* Ġrhs [ 7 ] Ġ+ Ġlhs [ 6 ] Ġ* Ġrhs [ 8 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlhs [ 1 ] Ġ* Ġrhs [ 6 ] Ġ+ Ġlhs [ 4 ] Ġ* Ġrhs [ 7 ] Ġ+ Ġlhs [ 7 ] Ġ* Ġrhs [ 8 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlhs [ 2 ] Ġ* Ġrhs [ 6 ] Ġ+ Ġlhs [ 5 ] Ġ* Ġrhs [ 7 ] Ġ+ Ġlhs [ 8 ] Ġ* Ġrhs [ 8 ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtranspose () Ġ= Ġvalues . let Ġ{ Ġm Ġ-> ĊĠĠĠĠĠĠĠ ĠMatrix 3 ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm [ 0 ], Ġm [ 3 ], Ġm [ 6 ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm [ 1 ], Ġm [ 4 ], Ġm [ 7 ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm [ 2 ], Ġm [ 5 ], Ġm [ 8 ], ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinv (): ĠMatrix 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( a , Ġd , Ġg , Ġb , Ġe , Ġh , Ġc , Ġf , Ġi ) Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ Ġval ĠA Ġ= Ġe Ġ* Ġi Ġ- Ġf Ġ* Ġh ĊĠĠĠĠĠĠĠ Ġval ĠB Ġ= Ġf Ġ* Ġg Ġ- Ġd Ġ* Ġi ĊĠĠĠĠĠĠĠ Ġval ĠC Ġ= Ġd Ġ* Ġh Ġ- Ġe Ġ* Ġg ĊĠĠĠĠĠĠĠ Ġval Ġdet Ġ= Ġa Ġ* ĠA Ġ+ Ġb Ġ* ĠB Ġ+ Ġc Ġ* ĠC ĊĊĠĠĠĠĠĠĠ Ġreturn ĠMatrix 3 ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA Ġ/ Ġdet , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠB Ġ/ Ġdet , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC Ġ/ Ġdet , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( c Ġ* Ġh Ġ- Ġb Ġ* Ġi ) Ġ/ Ġdet , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( a Ġ* Ġi Ġ- Ġc Ġ* Ġg ) Ġ/ Ġdet , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( b Ġ* Ġg Ġ- Ġa Ġ* Ġh ) Ġ/ Ġdet , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( b Ġ* Ġf Ġ- Ġc Ġ* Ġe ) Ġ/ Ġdet , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( c Ġ* Ġd Ġ- Ġa Ġ* Ġf ) Ġ/ Ġdet , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( a Ġ* Ġe Ġ- Ġb Ġ* Ġd ) Ġ/ Ġdet , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġcomponent 1 () Ġ= Ġvalues [ 0 ] ĊĠĠĠ Ġoperator Ġfun Ġcomponent 2 () Ġ= Ġvalues [ 1 ] ĊĠĠĠ Ġoperator Ġfun Ġcomponent 3 () Ġ= Ġvalues [ 2 ] ĊĠĠĠ Ġoperator Ġfun Ġcomponent 4 () Ġ= Ġvalues [ 3 ] ĊĠĠĠ Ġoperator Ġfun Ġcomponent 5 () Ġ= Ġvalues [ 4 ] ĊĠĠĠ Ġoperator Ġfun Ġcomponent 6 () Ġ= Ġvalues [ 5 ] ĊĠĠĠ Ġoperator Ġfun Ġcomponent 7 () Ġ= Ġvalues [ 6 ] ĊĠĠĠ Ġoperator Ġfun Ġcomponent 8 () Ġ= Ġvalues [ 7 ] ĊĠĠĠ Ġoperator Ġfun Ġcomponent 9 () Ġ= Ġvalues [ 8 ] Ċ } Ċ