package Ġspace . k science . k math . geometry Ċ Ċ import Ġspace . k science . k math . linear . Point Ċ import Ġspace . k science . k math . misc . Un stable K Math API Ċ import Ġspace . k science . k math . operations . Space Element Ċ import Ġspace . k science . k math . operations . invoke Ċ import Ġkotlin . math . sqrt Ċ Ċ @ Opt In ( Un stable K Math API :: class ) Ċ public Ġinterface ĠVector 3 D Ġ: ĠPoint < Double >, ĠVector , ĠSpace Element < Vector 3 D , ĠE uclidean 3 D Space > Ġ{ ĊĠĠĠ Ġpublic Ġval Ġx : ĠDouble ĊĠĠĠ Ġpublic Ġval Ġy : ĠDouble ĊĠĠĠ Ġpublic Ġval Ġz : ĠDouble ĊĠĠĠ Ġpublic Ġoverride Ġval Ġcontext : ĠE uclidean 3 D Space Ġget () Ġ= ĠE uclidean 3 D Space ĊĠĠĠ Ġpublic Ġoverride Ġval Ġsize : ĠInt Ġget () Ġ= Ġ 3 ĊĊĠĠĠ Ġpublic Ġoverride Ġoperator Ġfun Ġget ( index : ĠInt ): ĠDouble Ġ= Ġwhen Ġ( index ) Ġ{ ĊĠĠĠĠĠĠĠĠ 1 Ġ-> Ġx ĊĠĠĠĠĠĠĠĠ 2 Ġ-> Ġy ĊĠĠĠĠĠĠĠĠ 3 Ġ-> Ġz ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Access ing Ġoutside Ġof Ġpoint Ġbounds ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġoperator Ġfun Ġiterator (): ĠIterator < Double > Ġ= ĠlistOf ( x , Ġy , Ġz ). iterator () Ċ } Ċ Ċ @ Suppress (" FunctionName ") Ċ public Ġfun ĠVector 3 D ( x : ĠDouble , Ġy : ĠDouble , Ġz : ĠDouble ): ĠVector 3 D Ġ= ĠVector 3 DI mpl ( x , Ġy , Ġz ) Ċ Ċ public Ġval ĠVector 3 D . r : ĠDouble Ġget () Ġ= ĠE uclidean 3 D Space Ġ{ Ġsqrt ( norm ()) Ġ} Ċ Ċ private Ġdata Ġclass ĠVector 3 DI mpl ( ĊĠĠĠ Ġoverride Ġval Ġx : ĠDouble , ĊĠĠĠ Ġoverride Ġval Ġy : ĠDouble , ĊĠĠĠ Ġoverride Ġval Ġz : ĠDouble Ċ ) Ġ: ĠVector 3 D Ċ Ċ public Ġobject ĠE uclidean 3 D Space Ġ: ĠGeometry Space < Vector 3 D > Ġ{ ĊĠĠĠ Ġpublic Ġoverride Ġval Ġzero : ĠVector 3 D Ġby Ġlazy Ġ{ ĠVector 3 D ( 0 . 0 , Ġ 0 . 0 , Ġ 0 . 0 ) Ġ} ĊĊĠĠĠ Ġpublic Ġfun ĠVector 3 D . norm (): ĠDouble Ġ= Ġsqrt ( x Ġ* Ġx Ġ+ Ġy Ġ* Ġy Ġ+ Ġz Ġ* Ġz ) ĊĊĠĠĠ Ġpublic Ġoverride Ġfun ĠVector 3 D . distance To ( other : ĠVector 3 D ): ĠDouble Ġ= Ġ( this Ġ- Ġother ). norm () ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġadd ( a : ĠVector 3 D , Ġb : ĠVector 3 D ): ĠVector 3 D Ġ= ĊĠĠĠĠĠĠĠ ĠVector 3 D ( a . x Ġ+ Ġb . x , Ġa . y Ġ+ Ġb . y , Ġa . z Ġ+ Ġb . z ) ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġmultiply ( a : ĠVector 3 D , Ġk : ĠNumber ): ĠVector 3 D Ġ= ĊĠĠĠĠĠĠĠ ĠVector 3 D ( a . x Ġ* Ġk . toDouble (), Ġa . y Ġ* Ġk . toDouble (), Ġa . z Ġ* Ġk . toDouble ()) ĊĊĠĠĠ Ġpublic Ġoverride Ġfun ĠVector 3 D . dot ( other : ĠVector 3 D ): ĠDouble Ġ= ĊĠĠĠĠĠĠĠ Ġx Ġ* Ġother . x Ġ+ Ġy Ġ* Ġother . y Ġ+ Ġz Ġ* Ġother . z Ċ } Ċ