package Ġcom . mind inventory . liquid navbar . utils ĊĊ Ċ import Ġkotlin . math .* Ċ Ċ // ĠGeometry Utils Ġfor Ġmaking Ġthe Ġliquid Ġview Ċ class ĠGeometry Utils Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Tang ents Of Two Circ les ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx 1 : ĠDouble , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy 1 : ĠDouble , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr 1 : ĠDouble , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx 2 : ĠDouble , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy 2 : ĠDouble , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr 2 : ĠDouble ĊĠĠĠĠĠĠĠ Ġ): ĠArray < Double Array ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd Sq Ġ= Ġ( x 1 Ġ- Ġx 2 ) Ġ* Ġ( x 1 Ġ- Ġx 2 ) Ġ+ Ġ( y 1 Ġ- Ġy 2 ) Ġ* Ġ( y 1 Ġ- Ġy 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( d Sq Ġ<= Ġ( r 1 Ġ- Ġr 2 ) Ġ* Ġ( r 1 Ġ- Ġr 2 )) Ġreturn ĠArray ( 0 ) Ġ{ ĠDouble Array ( 4 ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd Ġ= Ġsqrt ( d Sq ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvx Ġ= Ġ( x 2 Ġ- Ġx 1 ) Ġ/ Ġd ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvy Ġ= Ġ( y 2 Ġ- Ġy 1 ) Ġ/ Ġd ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠArray ( 4 ) Ġ{ ĠDouble Array ( 4 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsign 1 Ġ= Ġ+ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( sign 1 Ġ>= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġ( r 1 Ġ- Ġsign 1 Ġ* Ġr 2 ) Ġ/ Ġd ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNow Ġwe 're Ġjust Ġintersect ing Ġa Ġline Ġwith Ġa Ġcircle : Ġv * n = c , Ġn * n = 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c Ġ* Ġc Ġ> Ġ 1 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign 1 Ġ-= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġh Ġ= Ġsqrt ( 0 . 0 . coerce At Least ( 1 . 0 Ġ- Ġc Ġ* Ġc )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsign 2 Ġ= Ġ+ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( sign 2 Ġ>= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnx Ġ= Ġvx Ġ* Ġc Ġ- Ġsign 2 . toDouble () Ġ* Ġh Ġ* Ġvy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġny Ġ= Ġvy Ġ* Ġc Ġ+ Ġsign 2 . toDouble () Ġ* Ġh Ġ* Ġvx ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġres [ i ++] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa [ 0 ] Ġ= Ġx 1 Ġ+ Ġr 1 Ġ* Ġnx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa [ 1 ] Ġ= Ġy 1 Ġ+ Ġr 1 Ġ* Ġny ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa [ 2 ] Ġ= Ġx 2 Ġ+ Ġsign 1 . toDouble () Ġ* Ġr 2 Ġ* Ġnx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa [ 3 ] Ġ= Ġy 2 Ġ+ Ġsign 1 . toDouble () Ġ* Ġr 2 Ġ* Ġny ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign 2 Ġ-= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign 1 Ġ-= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġres . copyOf ( i ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Tang ents Of Point To Circle ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpx : ĠDouble , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpy : ĠDouble , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcx : ĠDouble , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcy : ĠDouble , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr : ĠDouble ĊĠĠĠĠĠĠĠ Ġ): ĠArray < Double Array > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠArray ( 2 ) Ġ{ ĠDouble Array ( 4 ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCalculate Ġthe Ġtangent Ġpoint Ġof Ġthe Ġcircle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdx Ġ= Ġcx Ġ- Ġpx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdy Ġ= Ġcy Ġ- Ġpy ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdist Ġ= Ġsqrt (( dx Ġ* Ġdx Ġ+ Ġdy Ġ* Ġdy )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġas in (( r Ġ/ Ġdist )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġatt ain 2 Ġfunction Ġgives Ġthe Ġangle Ġof Ġa Ġpoint Ġwith Ġrespect Ġto Ġthe ĠX Ġaxis , Ġgiven Ġthe Ġpoint 's Ġx Ġand Ġy Ġcoordinates . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġatan 2 ( dy , Ġdx ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtheta 1 Ġ= Ġb Ġ- Ġa ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtan CP x 1 Ġ= Ġr Ġ* Ġsin ( theta 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtan CP y 1 Ġ= Ġr Ġ* Ġ- cos ( theta 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtheta 2 Ġ= Ġb Ġ+ Ġa ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtan CP x 2 Ġ= Ġr Ġ* Ġ- sin ( theta 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtan CP y 2 Ġ= Ġr Ġ* Ġcos ( theta 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// The Ġx Ġpoint Ġof Ġthe Ġtangent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtan Px 1 Ġ= Ġcx Ġ+ Ġtan CP x 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtan Px 2 Ġ= Ġcx Ġ+ Ġtan CP x 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// The Ġy Ġpoint Ġof Ġthe Ġtangent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtan Py 1 Ġ= Ġcy Ġ+ Ġtan CP y 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtan Py 2 Ġ= Ġcy Ġ+ Ġtan CP y 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġres [ 0 ][ 0 ] Ġ= Ġpx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres [ 0 ][ 1 ] Ġ= Ġpy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres [ 0 ][ 2 ] Ġ= Ġtan Px 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres [ 0 ][ 3 ] Ġ= Ġtan Py 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġres [ 1 ][ 0 ] Ġ= Ġpx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres [ 1 ][ 1 ] Ġ= Ġpy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres [ 1 ][ 2 ] Ġ= Ġtan Px 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres [ 1 ][ 3 ] Ġ= Ġtan Py 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġangle Between Points ( cx : ĠDouble , Ġcy : ĠDouble , Ġpx : ĠDouble , Ġpy : ĠDouble ): ĠDouble Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtheta Ġ= Ġatan 2 ( py Ġ- Ġcy , Ġpx Ġ- Ġcx ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMath . to Degrees ( theta ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }