import ĠPoly . Companion . overlap Ċ import Ġcoordinates . Coordinate Ċ import Ġcoordinates . Length Ċ Ċ // ĠReturns Ġthe ĠLength Ġto Ġmove Ġthe Ġmoving Poly Ġso Ġthat Ġit Ġborders Ġthe Ġpoly Ċ // Ġwhile Ġtrying Ġto Ġapproach Ġthe Ġtarget Ġcoordinate Ċ fun Ġsn apped To ( moving Poly : ĠPoly , Ġpoly : ĠPoly , Ġtarget : ĠCoordinate ): ĠLength Ġ{ ĊĠĠĠ Ġval Ġorigin To Target Ġ= Ġtarget Ġ- Ġmoving Poly . system !!. origin Coord ĊĠĠĠ Ġval Ġsnap Segment Ġ= Ġnearest Segment ( poly , Ġtarget ) ĊĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġorigin To Target ĊĠĠĠ Ġval Ġpoint On Bound Ġ= ĊĠĠĠĠĠĠĠ Ġtarget . system . coord ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsnap Segment . line Segment ( target . system ). nearest ( target . xy ()) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġmoving Point Ġ= Ġmoving Poly . points . min By Ġ{ Ġmoving Point Ġ-> ĊĠĠĠĠĠĠĠ Ġmeasure Over lapping Area ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġensure Non zero Area ( moving Poly . moved ( point On Bound Ġ- Ġmoving Point )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġensure Non zero Area ( poly ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ġ?: Ġreturn Ġorigin To Target ĊĊĠĠĠ Ġreturn Ġpoint On Bound Ġ- Ġmoving Point Ċ } Ċ Ċ private Ġfun Ġensure Non zero Area ( poly : ĠPoly ) Ġ= ĊĠĠĠ Ġif Ġ( poly . area Ġ== Ġ 0 . 0 ) Ġpoly . expanded ĊĠĠĠ Ġelse Ġpoly . copy () Ċ Ċ fun Ġmeasure Over lapping Area ( a : ĠPoly , Ġb : ĠPoly ) Ġ= ĊĠĠĠ Ġoverlap ( a , Ġb ). sum By Double Ġ{ Ġit . area Ġ} Ċ Ċ fun Ġnearest Segment ( poly : ĠPoly , Ġpoint : ĠCoordinate ) Ġ= ĊĠĠĠ Ġpoly . segment Pointers . min By Ġ{ ĊĠĠĠĠĠĠĠ Ġit . line Segment ( point . system ). distance ( point . xy ()) ĊĠĠĠ Ġ} Ċ Ċ fun Ġoffset Out wards ( poly : ĠPoly , Ġdistance : ĠDouble ): ĠPoly Ġ{ ĊĠĠĠ Ġreturn ĠlistOf ( distance , Ġ- distance ). map Ġ{ Ġoffset Ġ-> ĊĠĠĠĠĠĠĠ Ġpoly . offset Bounds ( offset ) ĊĠĠĠ Ġ}. max By Ġ{ Ġit . area Ġ} !! Ċ } Ċ