package Ġvor on oi Diagram . models Ċ Ċ import Ġjavafx . scene . paint . Color Ċ import Ġjavafx . scene . shape . Line Ċ import Ġt orn ad of x . style Ċ import Ġvor on oi Diagram . libs . Utils Ċ Ċ enum Ġclass ĠPosition Ġ{ ĊĠĠĠ ĠTOP , ĠBOTTOM , ĠLEFT , ĠRIGHT , ĠIN _ LINE Ċ } Ċ Ċ open Ġclass ĠMid Line ( var Ġstart : ĠPoint , Ġvar Ġend : ĠPoint ) Ġ{ ĊĊĠĠĠ Ġvar Ġcolor : ĠColor Ġ= ĠColor . BLACK ĊĠĠĠ Ġval Ġorigin Start : ĠPoint ĊĠĠĠ Ġval Ġorigin End : ĠPoint ĊĠĠĠ Ġvar Ġis HP Ġ= Ġtrue ĊĠĠĠ Ġlateinit Ġvar Ġa : ĠPoint ĊĠĠĠ Ġlateinit Ġvar Ġb : ĠPoint ĊĠĠĠ Ġval Ġslope ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠUtils . getS lope ( start , Ġend ) ĊĊĠĠĠ Ġconstructor Ġ( start X : ĠDouble , Ġstart Y : ĠDouble , Ġend X : ĠDouble , Ġend Y : ĠDouble ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ ĠPoint ( start X , Ġstart Y ), ĊĠĠĠĠĠĠĠ ĠPoint ( end X , Ġend Y ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġconstructor Ġ( start : ĠPoint , Ġend : ĠPoint , Ġa : ĠPoint , Ġb : ĠPoint ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġstart , Ġend ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . a Ġ= Ġa ĊĠĠĠĠĠĠĠ Ġthis . b Ġ= Ġb ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Vertical ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start . y Ġ> Ġend . y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . start Ġ= Ġthis . end . also Ġ{ Ġthis . end Ġ= Ġthis . start Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start . x Ġ> Ġend . x ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . start Ġ= Ġthis . end . also Ġ{ Ġthis . end Ġ= Ġthis . start Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġorigin Start Ġ= ĠPoint ( start . x , Ġstart . y ) ĊĠĠĠĠĠĠĠ Ġorigin End Ġ= ĠPoint ( end . x , Ġend . y ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfix () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Vertical ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start . y Ġ> Ġend . y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . start Ġ= Ġthis . end . also Ġ{ Ġthis . end Ġ= Ġthis . start Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start . x Ġ> Ġend . x ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . start Ġ= Ġthis . end . also Ġ{ Ġthis . end Ġ= Ġthis . start Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Fx Line (): ĠLine Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġline Ġ= ĠLine ( start . x , Ġstart . y , Ġend . x , Ġend . y ) ĊĠĠĠĠĠĠĠ Ġline . style Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġline ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Convex H ull Line (): ĠLine Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġline Ġ= ĠLine ( start . x , Ġstart . y , Ġend . x , Ġend . y ) ĊĠĠĠĠĠĠĠ Ġline . style Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Ġ= ĠColor . GREEN ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġline ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Divide Line (): ĠLine Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġline Ġ= ĠLine ( start . x , Ġstart . y , Ġend . x , Ġend . y ) ĊĠĠĠĠĠĠĠ Ġline . style Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Ġ= ĠColor . G OLD ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġline ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset Color () Ġ{ ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . BLACK ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcut ( next : ĠPoint , Ġintersection : ĠPoint ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" line Ġ${ toString ()} Ġnext Ġ= Ġ${ next . toString ()} Ġ${ is Where ( next )} ") ĊĠĠĠĠĠĠĠ Ġwhen Ġ( is Where ( next )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPosition . TOP Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= ĠPoint ( intersection . x , Ġintersection . y ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPosition . BOTTOM Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= ĠPoint ( intersection . x , Ġintersection . y ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPosition . LEFT Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= ĠPoint ( intersection . x , Ġintersection . y ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPosition . RIGHT Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= ĠPoint ( intersection . x , Ġintersection . y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Where ( p : ĠPoint ): ĠPosition Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Vertical ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġslope Ġ= ĠUtils . getS lope ( origin Start , Ġorigin End ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġslope To P Ġ= ĠUtils . getS lope ( origin Start , Ġp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslope To P Ġ< Ġslope Ġ-> ĠPosition . RIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslope To P Ġ> Ġslope Ġ-> ĠPosition . LEFT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠPosition . IN _ LINE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġslope Ġ= ĠUtils . getS lope ( origin Start , Ġorigin End ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġslope To P Ġ= ĠUtils . getS lope ( origin Start , Ġp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslope To P Ġ< Ġslope Ġ-> ĠPosition . TOP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslope To P Ġ> Ġslope Ġ-> ĠPosition . BOTTOM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠPosition . IN _ LINE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Vertical (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMath . abs ( Utils . getS lope ( start , Ġend )) Ġ>= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġout ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ" E Ġ${ start . x . toInt ()} Ġ${ start . y . toInt ()} Ġ${ end . x . toInt ()} Ġ${ end . y . toInt () }" ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"{ (${ start . x . toInt ()}, Ġ${ start . y . toInt () }) (${ end . x . toInt ()}, Ġ${ end . y . toInt () })} Ġ" ĊĠĠĠ Ġ} Ċ }