package Ġdemo . cor rid or Ċ Ċ import Ġdemo . math . Edge Ċ import Ġdemo . math . Vector 2 Ċ import Ġdemo . math . Vector 2 . Companion . maximum Ċ import Ġdemo . math . Vector 2 . Companion . minimum Ċ import Ġjava . awt .* Ċ import Ġjava . awt . geom . Line 2 D Ċ import Ġjavax . swing . JPanel Ċ import Ġkotlin . math . floor Ċ import Ġkotlin . math . min Ċ Ċ class ĠEditor Panel Ġ: ĠJPanel () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġroute Ġ= ĠRoute ( empty Array ()) ĊĠĠĠ Ġprivate Ġvar Ġradius Ġ= Ġ 1 . 0 ĊĠĠĠ Ġprivate Ġvar Ġviewport Scaling Ġ= Ġthis :: adaptive Scale ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgd Ġ= ĠGraphics Environment . getLocal Graphics Environment (). default Screen Device ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġ( gd . displayMode . width Ġ* Ġ 7 ) Ġ/ Ġ 8 ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġ( gd . displayMode . height Ġ* Ġ 4 ) Ġ/ Ġ 5 ĊĠĠĠĠĠĠĠ Ġpreferred Size Ġ= ĠDimension ( width , Ġheight ) ĊĠĠĠĠĠĠĠ Ġis Opaque Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġis Double Buffered Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġis Focus able Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġchange Route () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġenable Adaptive Scaling ( toggle On : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġviewport Scaling Ġ= Ġif Ġ( toggle On ) Ġthis :: adaptive Scale Ġelse Ġthis :: constant Scale ĊĠĠĠĠĠĠĠ Ġrep aint () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġchange Route ( total Steps : ĠInt Ġ= Ġ 2 5 , Ġstep Size : ĠDouble Ġ= Ġ 7 5 . 0 , Ġstep Variance : ĠDouble Ġ= Ġ 0 . 2 , Ġmax Angle : ĠDouble Ġ= Ġ 1 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġroute Ġ= Ġgenerate Route ( total Steps , Ġstep Size , Ġstep Variance , Ġmax Angle ) ĊĠĠĠĠĠĠĠ Ġrep aint () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġchange Radius ( value : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġradius Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġrep aint () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpaint ( g : ĠGraphics ) Ġ= Ġwith Graphics 2 D ( g ). run Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( route . length Ġ> Ġ 0 . 0 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcor rid or Ġ= Ġroute . expand ( radius ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviewport Scaling ( cor rid or ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale ( this Ġ* Ġ 0 . 9 , Ġ- this Ġ* Ġ 0 . 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Ġ= ĠBasic Stroke (( 2 . 0 Ġ/ Ġthis ). toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . color Ġ= ĠColor . BLACK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Edges ( this , Ġroute . edges ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . color Ġ= ĠColor . RED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Normals ( this , Ġroute . edges ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . color Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Vertices ( this , Ġroute . vertices ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . color Ġ= ĠColor . GREEN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Edges ( this , Ġcor rid or ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Edges ( g : ĠGraphics 2 D , Ġedges : ĠArray < Edge >) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedges . forEach Ġ{ Ġg . draw ( Line 2 D . Double ( it . start . x , Ġit . start . y , Ġit . end . x , Ġit . end . y )) Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Normals ( g : ĠGraphics 2 D , Ġedges : ĠArray < Edge >) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedges . forEach Ġ{ Ġ( it . middle Ġ+ Ġit . normal Ġ* Ġ 1 0 . 0 ). apply Ġ{ Ġg . draw ( Line 2 D . Double ( it . middle . x , Ġit . middle . y , Ġx , Ġy )) Ġ} Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Vertices ( g : ĠGraphics 2 D , Ġvertices : ĠArray < Vector 2 >) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertices . forEach Ġ{ Ġg . fill O val ( floor ( it . x Ġ- Ġ 2 . 0 ). toInt (), Ġfloor ( it . y Ġ- Ġ 2 . 0 ). toInt (), Ġ 4 , Ġ 4 ) Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Route ( total Steps : ĠInt , Ġstep Size : ĠDouble , Ġstep Variance : ĠDouble , Ġmax Angle : ĠDouble ): ĠRoute Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdog Walker Ġ= ĠDog Walker ( step Variance , Ġmax Angle ) ĊĠĠĠĠĠĠĠ Ġreturn ĠRoute ( dog Walker . walk ies ( Vector 2 . ZERO , ĠVector 2 ( 1 . 0 , Ġ 0 . 0 ), Ġtotal Steps , Ġstep Size )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconstant Scale ( ignore : ĠArray < Edge >) Ġ= Ġ 0 . 7 5 ĊĊĠĠĠ Ġprivate Ġfun Ġadaptive Scale ( edges : ĠArray < Edge >): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmin Ġ= ĠVector 2 . POSITIVE _ INFINITY ĊĠĠĠĠĠĠĠ Ġvar Ġmax Ġ= ĠVector 2 . NEGATIVE _ INFINITY ĊĠĠĠĠĠĠĠ Ġedges . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Ġ= Ġminimum ( min , Ġit . min ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Ġ= Ġmaximum ( max , Ġit . max ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġmax Ġ- Ġmin ĊĠĠĠĠĠĠĠ Ġreturn Ġmin ( width Ġ/ Ġsize . x , Ġheight Ġ/ Ġsize . y ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwith Graphics 2 D ( g : ĠGraphics ) Ġ= Ġ( g Ġas ĠGraphics 2 D ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġbackground Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠ Ġclear Rect ( 0 , Ġ 0 , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠ Ġset Rendering Hint ( Rendering Hints . KEY _ ANTI ALIAS ING , ĠRendering Hints . VALUE _ ANTI ALIAS _ ON ) ĊĠĠĠĠĠĠĠ Ġtranslate ( width Ġ/ Ġ 2 . 0 , Ġheight Ġ/ Ġ 2 . 0 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} Ċ } Ċ