/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠRoman ĠE liz ar ov . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ package Ġpoly hed ra . common . poly Ċ Ċ import Ġpoly hed ra . common . util .* Ċ Ċ enum Ġclass ĠMid Point Ġ{ ĠT ang ent , ĠCenter , ĠClose st Ġ} Ċ Ċ // Ġreturns Ġ 0 . 0 Ġwhen Ġtangent Ġpoint Ġis Ġa , Ġ 1 . 0 Ġ-- Ġwhen Ġit Ġis Ġb , Ġor Ġa Ġfraction Ġin Ġbetween Ċ fun Ġtangent Fraction ( a : ĠVec 3 , Ġb : ĠVec 3 ): ĠDouble Ġ{ ĊĠĠĠ Ġval Ġdx Ġ= Ġb . x Ġ- Ġa . x ĊĠĠĠ Ġval Ġdy Ġ= Ġb . y Ġ- Ġa . y ĊĠĠĠ Ġval Ġdz Ġ= Ġb . z Ġ- Ġa . z ĊĠĠĠ Ġreturn Ġ Ġ-( a . x Ġ* Ġdx Ġ+ Ġa . y Ġ* Ġdy Ġ+ Ġa . z Ġ* Ġdz ) Ġ/ Ġ( sqr ( dx ) Ġ+ Ġsq r ( dy ) Ġ+ Ġsq r ( dz )) Ċ } Ċ Ċ // Ġdistance Ġfrom Ġorigin Ġto Ġline ĠA - B Ċ fun Ġtangent Distance ( a : ĠVec 3 , Ġb : ĠVec 3 ): ĠDouble Ġ= ĊĠĠĠ Ġtangent Fraction ( a , Ġb ). distance At Segment ( a , Ġb ) Ċ Ċ fun Ġis Tangent In Segment ( a : ĠVec 3 , Ġb : ĠVec 3 ): ĠBoolean Ġ= ĊĠĠĠ Ġtangent Fraction ( a , Ġb ) Ġin ĠEPS .. 1 Ġ- ĠEPS Ċ Ċ fun Ġmid Point Fraction ( a : ĠVec 3 , Ġb : ĠVec 3 , Ġmid Point : ĠMid Point ): ĠDouble Ġ{ ĊĠĠĠ Ġif Ġ( mid Point Ġ== ĠMid Point . Center ) Ġreturn Ġ 0 . 5 ĊĠĠĠ Ġval Ġf Ġ= Ġtangent Fraction ( a , Ġb ) ĊĠĠĠ Ġif Ġ( f Ġ! in ĠEPS .. 1 Ġ- ĠEPS ) Ġ{ Ġ// Ġ! is Tangent In Segment ĊĠĠĠĠĠĠĠ Ġif Ġ( mid Point Ġ== ĠMid Point . Tangent ) Ġreturn Ġ 0 . 5 ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( a . norm Ġ< Ġb . norm Ġ+ ĠEPS ) Ġ 0 . 0 Ġelse Ġ 1 . 0 Ġ// Ġclosest ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġf Ċ } Ċ Ċ fun ĠEdge . is Tangent In Segment (): ĠBoolean Ġ= ĊĠĠĠ Ġis Tangent In Segment ( a , Ġb ) Ċ Ċ fun ĠEdge . mid Point Fraction ( mid Point : ĠMid Point ): ĠDouble Ġ= ĊĠĠĠ Ġmid Point Fraction ( a , Ġb , Ġmid Point ) Ċ Ċ fun ĠEdge . mid Point ( mid Point : ĠMid Point ): ĠVec 3 Ġ= ĊĠĠĠ Ġmid Point Fraction ( mid Point ). at Segment ( a , Ġb ) Ċ Ċ fun ĠEdge . tang ent Point (): ĠVec 3 Ġ= ĊĠĠĠ Ġtangent Fraction ( a , Ġb ). at Segment ( a , Ġb ) Ċ Ċ fun ĠEdge . tang ent Distance (): ĠDouble Ġ= ĊĠĠĠ Ġtangent Fraction ( a , Ġb ). distance At Segment ( a , Ġb ) ĊĊĊĊ