package Ġjp . k ai . for cel ayout . properties Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . util . Pair Ċ import Ġjp . k ai . for cel ayout . ATT ENU ATION Ċ import Ġjp . k ai . for cel ayout . CO UL O MB Ċ import Ġjp . k ai . for cel ayout . Links Ċ import Ġjp . k ai . for cel ayout . Nodes Ċ import Ġjp . k ai . for cel ayout . Nodes . Node Pair Ċ import Ġjp . k ai . for cel ayout . properties . Graph Style . nodes Width Ċ import Ġjp . k ai . for cel ayout . properties . Graph Style . round Size Ċ import Ġjp . k ai . for cel ayout . properties . Util . Companion . getC ropped Bitmap Ċ import Ġjp . k ai . for cel ayout . properties . Util . Companion . resize Bitmap Ċ import Ġjava . util . ArrayList Ċ import Ġandroid . view . WindowManager ĊĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby Ġk ai Ġon Ġ 2 0 1 7 / 0 5 / 0 1 . Ċ Ġ* ĠBuilder ĠClass Ċ Ġ*/ Ċ Ċ class ĠForce Property ( private Ġval ĠmContext : ĠContext ){ ĊĠĠĠ Ġvar Ġis Ready : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ/** Ġnode 's Ġand Ġlink 's ĠList Ġ*/ ĊĠĠĠ Ġinternal Ġvar Ġnodes Ġ= ĠArrayList < Node >() ĊĠĠĠ Ġinternal Ġvar Ġedges Ġ= ĠArrayList < Edge >() ĊĠĠĠ Ġvar Ġnode Index : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġn Edges : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar ĠnodeName Array : ĠArray < String ?> Ġ= ĠarrayOf Null s ( 0 ) ĊĠĠĠ Ġvar Ġnodes List Ġ= ĠArrayList < Pair < String , ĠBitmap >>() ĊĊĠĠĠ Ġ/** Ġdraw Ġarea Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġdisplay Width : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġdisplay Height : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġdraw Area Width : ĠFloat Ġ= Ġ 0 f Ġ/** Ġdraw - area Ġmeans Ġscreen - size Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġdraw Area Height : ĠFloat Ġ= Ġ 0 f ĊĊĠĠĠ Ġ/** Ġspring - like Ġforce Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġdistance : ĠInt Ġ= Ġ 3 0 0 ĊĠĠĠ Ġprivate Ġvar Ġbo unce : ĠDouble Ġ= Ġ 0 . 0 8 ĊĠĠĠ Ġprivate Ġvar Ġgravity : ĠDouble Ġ= Ġ 0 . 0 4 ĊĊĠĠĠ Ġ/** Ġnode Ġstyle Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġreduction : ĠInt Ġ= Ġ 3 0 ĊĊĠĠĠ Ġinternal Ġfun Ġprepare (): ĠForce Property Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwm Ġ= ĠmContext . getSystem Service ( Context . WINDOW _ SERVICE ) Ġas ĠWindow Manager ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Ġ= Ġwm . default Display ĊĊĠĠĠĠĠĠĠ Ġdisplay Width Ġ= Ġdisplay . width . toFloat () ĊĠĠĠĠĠĠĠ Ġdisplay Height Ġ= Ġdisplay . height . toFloat () ĊĠĠĠĠĠĠĠ Ġis Ready Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsize ( width : ĠInt ): ĠForce Property Ġ{ ĊĠĠĠĠĠĠĠ ĠGraph Style . nodes Width Ġ= Ġwidth ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnodes ( node maps : ĠArrayList < Pair < String , ĠInt >> ): ĠForce Property Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Nodes () ĊĠĠĠĠĠĠĠ ĠGraph Style . is Img Draw Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġval Ġresource Ġ= ĠmContext . resources ĊĠĠĠĠĠĠĠ Ġval Ġiterator Ġ: Iterator < Pair < String , ĠInt >> Ġ= Ġnode maps . iterator () ĊĊĠĠĠĠĠĠĠ ĠnodeName Array Ġ= ĠarrayOf Null s ( node maps . size ) ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( iterator . hasNext ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĠNode ĠList Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpair : ĠPair < String , ĠInt > Ġ= Ġiterator . next () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** Ġget Ġimage Ġproperties Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Options Ġ= ĠBitmap Factory . Options () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Options . in Preferred Config Ġ= ĠBitmap . Config . ARGB _ 8 8 8 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Options . in Just Decode Bounds Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap Factory . decode Resource ( resource , Ġpair . second , Ġimage Options ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Width Ġ= Ġimage Options . out Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb mf Options Ġ= ĠBitmap Factory . Options () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** Ġresize Ġimage Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreduction Ġ= Ġbitmap Width Ġ/ Ġnodes Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reduction Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb mf Options . in Sample Size Ġ= Ġreduction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbitmap Ġ= ĠBitmap Factory . decode Resource ( resource , Ġpair . second , Ġb mf Options ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġimg height Ġ= Ġb mf Options . out Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġimg width Ġ= Ġb mf Options . out Width ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( img width Ġ!= Ġnodes Width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= Ġresize Bitmap ( bitmap , Ġnodes Width ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg height Ġ= Ġbitmap . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg width Ġ= Ġbitmap . width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Area Width Ġ= Ġdisplay Width Ġ- Ġimg width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Area Height Ġ= Ġdisplay Height Ġ- Ġimg height ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Node ( pair . first , Ġimg width , Ġimg height ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠnodeName Array [ node Index - 1 ] Ġ= Ġpair . first ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnodes List . add ( Pair ( pair . first , ĠgetC ropped Bitmap ( bitmap , Ġround Size ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġ( node maps . size Ġ- Ġ 1 ) .. 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode maps . remove At ( i ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnode maps . clear () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnodes ( node maps : ĠNodes ): ĠForce Property Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Nodes () ĊĠĠĠĠĠĠĠ ĠGraph Style . is Img Draw Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġval Ġresource Ġ= ĠmContext . resources ĊĠĠĠĠĠĠĠ Ġval Ġiterator Ġ: Iterator < Node Pair > Ġ= Ġnode maps . iterator () ĊĊĠĠĠĠĠĠĠ ĠnodeName Array Ġ= ĠarrayOf Null s ( node maps . size ) ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( iterator . hasNext ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĠNode ĠList Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpair : ĠNode Pair Ġ= Ġiterator . next () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** Ġget Ġimage Ġproperties Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Options Ġ= ĠBitmap Factory . Options () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Options . in Preferred Config Ġ= ĠBitmap . Config . ARGB _ 8 8 8 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Options . in Just Decode Bounds Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap Factory . decode Resource ( resource , Ġpair . getResource (), Ġimage Options ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Width Ġ= Ġimage Options . out Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb mf Options Ġ= ĠBitmap Factory . Options () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** Ġresize Ġimage Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreduction Ġ= Ġbitmap Width Ġ/ Ġnodes Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reduction Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb mf Options . in Sample Size Ġ= Ġreduction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbitmap Ġ= ĠBitmap Factory . decode Resource ( resource , Ġpair . getResource (), Ġb mf Options ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġimg height Ġ= Ġb mf Options . out Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġimg width Ġ= Ġb mf Options . out Width ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( img width Ġ!= Ġnodes Width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= Ġresize Bitmap ( bitmap , Ġnodes Width ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg height Ġ= Ġbitmap . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg width Ġ= Ġbitmap . width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Area Width Ġ= Ġdisplay Width Ġ- Ġimg width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Area Height Ġ= Ġdisplay Height Ġ- Ġimg height ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Node ( pair . getLabel (), Ġimg width , Ġimg height ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠnodeName Array [ node Index - 1 ] Ġ= Ġpair . getLabel () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnodes List . add ( Pair ( pair . getLabel (), ĠgetC ropped Bitmap ( bitmap , Ġround Size ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġ( node maps . size Ġ- Ġ 1 ) .. 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode maps . remove At ( i ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnode maps . clear () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnodes ( node maps : ĠArray < String >): ĠForce Property Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Nodes () ĊĠĠĠĠĠĠĠ ĠGraph Style . is Img Draw Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ ĠnodeName Array Ġ= ĠarrayOf Null s ( node maps . size ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. node maps . size Ġ- Ġ 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Node ( node maps [ i ], Ġnodes Width , Ġnodes Width ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠnodeName Array [ i ] Ġ= Ġnode maps [ i ] ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdraw Area Width Ġ= Ġdisplay Width Ġ- Ġnodes Width ĊĠĠĠĠĠĠĠ Ġdraw Area Height Ġ= Ġdisplay Height Ġ- Ġnodes Width ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlinks ( link Maps : ĠList < String >): ĠForce Property Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Edges () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. node Index Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 .. node Index Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ!= Ġj ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Edge ( i , Ġj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġ 0 .. link Maps . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpair Ġ= Ġlink Maps [ k ]. split ("- ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pair . size Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. n Edges Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( edges [ i ]. from Ġ== ĠnodeName Array . indexOf ( pair [ 0 ]) Ġ&& Ġedges [ i ]. to Ġ== ĠnodeName Array . indexOf ( pair [ 1 ]) Ġ|| Ġedges [ i ]. to Ġ== ĠnodeName Array . indexOf ( pair [ 0 ]) Ġ&& Ġedges [ i ]. from Ġ== ĠnodeName Array . indexOf ( pair [ 1 ])) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedges [ i ]. group Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlinks ( link Maps : ĠLinks ): ĠForce Property Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Edges () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. node Index Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 .. node Index Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ!= Ġj ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Edge ( i , Ġj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġ 0 .. link Maps . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpair Ġ= Ġlink Maps [ k ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. n Edges Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( edges [ i ]. from Ġ== ĠnodeName Array . indexOf ( pair . child ()) Ġ&& Ġedges [ i ]. to Ġ== ĠnodeName Array . indexOf ( pair . parent ()) Ġ|| Ġedges [ i ]. to Ġ== ĠnodeName Array . indexOf ( pair . child ()) Ġ&& Ġedges [ i ]. from Ġ== ĠnodeName Array . indexOf ( pair . parent ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedges [ i ]. group Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġ( link Maps . size Ġ- Ġ 1 ) .. 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlink Maps . remove At ( i ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlink Maps . clear () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġf riction ( bounce : ĠDouble ): ĠForce Property Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . bounce Ġ= Ġbo unce ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdistance ( distance : ĠInt ): ĠForce Property Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . distance Ġ= Ġdistance ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgravity ( gravity : ĠDouble ): ĠForce Property Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . gravity Ġ= Ġgravity ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart (){ ĊĠĠĠĠĠĠĠ Ġis Ready Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Node ( lbl : ĠString , Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= ĠNode () ĊĠĠĠĠĠĠĠ Ġn . x Ġ= Ġdraw Area Width Ġ* ĠMath . random () ĊĠĠĠĠĠĠĠ Ġn . y Ġ= Ġ( draw Area Height Ġ- Ġ 1 0 ) Ġ* ĠMath . random () Ġ+ Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġn . nod ename Ġ= Ġlbl ĊĠĠĠĠĠĠĠ Ġn . width Ġ= Ġwidth . toDouble () ĊĠĠĠĠĠĠĠ Ġn . height Ġ= Ġheight . toDouble () ĊĠĠĠĠĠĠĠ Ġn . dx Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġn . dy Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġnodes . add ( n ) ĊĠĠĠĠĠĠĠ Ġnode Index ++ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Edge ( from : ĠInt , Ġto : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġe Ġ= ĠEdge () ĊĠĠĠĠĠĠĠ Ġe . from Ġ= Ġfrom ĊĠĠĠĠĠĠĠ Ġe . to Ġ= Ġto ĊĠĠĠĠĠĠĠ Ġe . group Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġedges . add ( e ) ĊĠĠĠĠĠĠĠ Ġn Edges ++ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrelax () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. node Index Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfx Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfy Ġ= Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 .. node Index Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdist X Ġ= Ġ(( nodes [ i ]. x Ġ+ Ġnodes [ i ]. width Ġ/ Ġ 2 Ġ- Ġ( nodes [ j ]. x Ġ+ Ġnodes [ j ]. width Ġ/ Ġ 2 )). toInt ()). toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdist Y Ġ= Ġ(( nodes [ i ]. y Ġ+ Ġnodes [ i ]. height Ġ/ Ġ 2 Ġ- Ġ( nodes [ j ]. y Ġ+ Ġnodes [ j ]. height Ġ/ Ġ 2 )). toInt ()). toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġr sq Ġ= Ġdist X Ġ* Ġdist X Ġ+ Ġdist Y Ġ* Ġdist Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr sq Round Ġ= Ġr sq . toInt () Ġ* Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr sq Ġ= Ġ( rs q Round Ġ/ Ġ 1 0 0 ). toDouble () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġc ou lo mb Dist X Ġ= ĠCO UL O MB Ġ* Ġdist X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġc ou lo mb Dist Y Ġ= ĠCO UL O MB Ġ* Ġdist Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc ou lo mb Dist Round X Ġ= Ġc ou lo mb Dist X . toInt () Ġ* Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc ou lo mb Dist Round Y Ġ= Ġc ou lo mb Dist Y . toInt () Ġ* Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc ou lo mb Dist X Ġ= Ġ( co ulo mb Dist Round X Ġ/ Ġ 1 0 0 ). toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc ou lo mb Dist Y Ġ= Ġ( co ulo mb Dist Round Y Ġ/ Ġ 1 0 0 ). toDouble () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rs q Ġ!= Ġ 0 . 0 Ġ&& ĠMath . sqrt ( rs q ) Ġ< Ġdistance ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfx Ġ+= Ġc ou lo mb Dist X Ġ/ Ġr sq ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfy Ġ+= Ġc ou lo mb Dist Y Ġ/ Ġr sq ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** Ġcalculate Ġgravity Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdist XC Ġ= Ġdisplay Width Ġ/ Ġ 2 Ġ- Ġ( nodes [ i ]. x Ġ+ Ġnodes [ i ]. width Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdist Y C Ġ= Ġdisplay Height Ġ/ Ġ 2 Ġ- Ġ( nodes [ i ]. y Ġ+ Ġnodes [ i ]. height Ġ/ Ġ 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfx Ġ+= Ġgravity Ġ* Ġdist XC ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfy Ġ+= Ġgravity Ġ* Ġdist Y C ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** Ġcalculate Ġspring Ġlike Ġforce Ġbetween Ġfrom Ġand Ġto Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 .. n Edges Ġ- Ġ 1 Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdist X Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdist Y Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( edges [ j ]. group ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġedges [ j ]. from ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdist X Ġ= Ġnodes [ edges [ j ]. to ]. x Ġ- Ġnodes [ i ]. x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdist Y Ġ= Ġnodes [ edges [ j ]. to ]. y Ġ- Ġnodes [ i ]. y ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( i Ġ== Ġedges [ j ]. to ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdist X Ġ= Ġnodes [ edges [ j ]. from ]. x Ġ- Ġnodes [ i ]. x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdist Y Ġ= Ġnodes [ edges [ j ]. from ]. y Ġ- Ġnodes [ i ]. y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfx Ġ+= Ġbo unce Ġ* Ġdist X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfy Ġ+= Ġbo unce Ġ* Ġdist Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnodes [ i ]. dx Ġ= Ġ( nodes [ i ]. dx Ġ+ Ġfx ) Ġ* ĠATT ENU ATION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnodes [ i ]. dy Ġ= Ġ( nodes [ i ]. dy Ġ+ Ġfy ) Ġ* ĠATT ENU ATION ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnodes [ i ]. x Ġ+= Ġnodes [ i ]. dx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnodes [ i ]. y Ġ+= Ġnodes [ i ]. dy ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Nodes () Ġ{ ĊĠĠĠĠĠĠĠ Ġnode Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġnodes Ġ= ĠArrayList < Node >() ĊĠĠĠĠĠĠĠ ĠnodeName Array Ġ= ĠarrayOf Null s ( 0 ) ĊĠĠĠĠĠĠĠ Ġnodes List . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Edges (){ ĊĠĠĠĠĠĠĠ Ġn Edges Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġedges Ġ= ĠArrayList < Edge >() ĊĠĠĠ Ġ} Ċ } Ċ