package Ġcom . c ave . library . tools Ċ Ċ import Ġcom . c ave . library . vector . vec 3 . Vector 3 Ċ import Ġcom . c ave . library . vector . vec 4 . Vector 4 Ċ import Ġkotlin . math . PI Ċ import Ġkotlin . math . acos Ċ import Ġkotlin . math . sqrt Ċ Ċ fun Ġsquared ( x : ĠDouble , Ġy : ĠDouble , Ġz : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠ Ġreturn Ġx * x Ġ+ Ġy * y Ġ+ Ġz * z Ċ } Ċ Ċ fun Ġsquared ( x : ĠDouble , Ġy : ĠDouble , Ġz : ĠDouble , Ġw : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠ Ġreturn Ġx * x Ġ+ Ġy * y Ġ+ Ġz * z Ġ+ Ġw * w Ċ } Ċ Ċ fun Ġh ypot ( x : ĠDouble , Ġy : ĠDouble , Ġz : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠ Ġreturn Ġsqrt ( squared ( x , Ġy , Ġz )) Ċ } Ċ Ċ fun Ġh ypot ( v : ĠVector 3 ) Ġ= Ġh ypot ( v . x , Ġv . y , Ġv . z ) Ċ Ċ fun Ġh ypot ( x : ĠDouble , Ġy : ĠDouble , Ġz : ĠDouble , Ġw : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠ Ġreturn Ġsqrt ( squared ( x , Ġy , Ġz , Ġw )) Ċ } Ċ Ċ fun Ġh ypot ( v : ĠVector 4 ) Ġ= Ġh ypot ( v . x , Ġv . y , Ġv . z , Ġv . w ) Ċ Ċ fun Ġsafe A cos ( v : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( v Ġ< Ġ- 1 . 0 ) ĠPI Ġelse Ġif Ġ( v Ġ> Ġ+ 1 . 0 ) Ġ 0 . 0 Ġelse Ġa cos ( v ) Ċ } Ċ