package Ġinfo . la ht . three kt . math Ċ Ċ import Ġinfo . la ht . three kt . core . Clone able Ċ import Ġkotlin . math .* Ċ Ċ private Ġconst Ġval ĠEPS Ġ= Ġ 0 . 0 0 0 0 0 1 f Ċ Ċ class ĠS pherical ( ĊĠĠĠĠĠĠĠ Ġvar Ġradius : ĠFloat Ġ= Ġ 1 f , ĊĠĠĠĠĠĠĠ Ġvar Ġphi : ĠFloat Ġ= Ġ 0 f , ĊĠĠĠĠĠĠĠ Ġvar Ġtheta : ĠFloat Ġ= Ġ 0 f Ċ ) Ġ: ĠClone able Ġ{ ĊĊĠĠĠ Ġfun Ġset ( radius : ĠFloat , Ġphi : ĠFloat , Ġtheta : ĠFloat ): ĠS pherical Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . radius Ġ= Ġradius ĊĠĠĠĠĠĠĠ Ġthis . phi Ġ= Ġphi ĊĠĠĠĠĠĠĠ Ġthis . theta Ġ= Ġtheta ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclone (): ĠS pherical Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠS pherical ( radius , Ġphi , Ġtheta ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcopy ( source : ĠS pherical ): ĠS pherical Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġset ( source . radius , Ġsource . phi , Ġsource . theta ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmake Safe (): ĠS pherical Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthis . phi Ġ= Ġmax ( EPS , Ġmin ( PI . toFloat () Ġ- ĠEPS , Ġthis . phi )); ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset From Vector 3 Ġ( Ġv : ĠVector 3 Ġ): ĠS pherical Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis . set From Cartesian Coords ( Ġv . x , Ġv . y , Ġv . z Ġ); ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset From Cartesian Coords Ġ( Ġx : ĠFloat , Ġy : ĠFloat , Ġz : ĠFloat Ġ): ĠS pherical Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthis . radius Ġ= Ġsqrt ( Ġx Ġ* Ġx Ġ+ Ġy Ġ* Ġy Ġ+ Ġz Ġ* Ġz Ġ); ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Ġthis . radius Ġ== Ġ 0 f Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . theta Ġ= Ġ 0 f ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . phi Ġ= Ġ 0 f ; ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . theta Ġ= Ġatan 2 ( Ġx , Ġz Ġ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . phi Ġ= Ġa cos ( Ġclamp ( Ġy Ġ/ Ġthis . radius , Ġ- Ġ 1 , Ġ 1 Ġ) Ġ); ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ; ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" S pherical ( radius =$ radius , Ġphi =$ phi , Ġtheta =$ theta )" ĊĠĠĠ Ġ} Ċ Ċ }