/** Ċ Ġ* ĠBased Ġon Ċ Ġ* Ġhttp :// www . code pl astic . com / 2 0 1 7 / 0 9 / 0 9 / controlled - circle - packing - with - processing / Ċ Ġ*/ Ċ package Ġsketch Ċ Ċ import Ġextensions . Custom Screenshots Ċ import Ġforce . Moving Body Ċ import Ġorg . open rnd r . application Ċ import Ġorg . open rnd r . color . Color RGB a Ċ import Ġorg . open rnd r . extra . noise . random Ċ import Ġorg . open rnd r . extra . noise . simp lex Ċ import Ġorg . open rnd r . extras . color . pa let tes . color Sequence Ċ import Ġorg . open rnd r . math . Vector 2 Ċ import Ġorg . open rnd r . math . map Ċ import Ġorg . open rnd r . shape . Circle Ċ import Ġutil . Pack Complete Result Ċ import Ġutil . generate Moving B odies Ċ import Ġutil . pack Circ les Control led Ċ import Ġutil . timestamp Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . random . Random Ċ Ċ fun Ġmain () Ġ= Ġapplication Ġ{ ĊĠ Ġconfigure Ġ{ ĊĠĠĠ Ġwidth Ġ= Ġ 1 0 0 0 ĊĠĠĠ Ġheight Ġ= Ġ 1 0 0 0 ĊĠ Ġ} ĊĊĠ Ġprogram Ġ{ ĊĠĠĠ Ġval Ġprog Name Ġ= Ġthis . name . if Blank Ġ{ Ġthis . window . title . if Blank Ġ{ Ġ" my - amaz ing - drawing " Ġ} Ġ} ĊĠĠĠ Ġvar Ġseed Ġ= Ġrandom ( 0 . 0 , ĠInt . MAX _ VALUE . toDouble ()). toInt () ĊĠĠĠ Ġprintln (" seed Ġ= Ġ$ seed ") ĊĊĠĠĠ Ġval Ġscreenshots Ġ= Ġextend ( Custom Screenshots ()) Ġ{ ĊĠĠĠĠĠ Ġquit After Screenshot Ġ= Ġfalse ĊĠĠĠĠĠ Ġscale Ġ= Ġ 3 . 0 ĊĠĠĠĠĠ Ġname Ġ= Ġ" screenshots /$ prog Name /${ timestamp ()} - seed -$ seed . png " ĊĠĠĠĠĠ Ġcapture Every Frame Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġradius Range Ġ= Ġ 0 . 1 0 Ġto Ġ 4 0 . 0 ĊĠĠĠ Ġ// ĠSome Ġvery Ġinteresting Ġthings Ġcan Ġhappen Ġif Ġyou Ġdon 't Ġhon or Ġthe Ġactual Ġsimp lex Ġrange Ġof Ġ[- 1 . 0 , Ġ 1 . 0 ] ĊĠĠĠ Ġval Ġnoise Range Ġ= Ġ- 0 . 5 Ġto Ġ 0 . 5 ĊĠĠĠ Ġval Ġnoise Scale Ġ= Ġ 2 0 0 . 0 ĊĊĠĠĠ Ġval Ġspectrum Ġ= Ġcolor Sequence ( ĊĠĠĠĠĠĠ 0 . 0 Ġto ĊĠĠĠĠĠĠĠ ĠColor RGB a . from Hex (" 9 AC 0 C 1 "), Ġ// Ġgreen ish Ġblue ĊĠĠĠĠĠĠ 0 . 2 5 Ġto ĊĠĠĠĠĠĠĠ ĠColor RGB a . from Hex (" E 7 CD 7 E "), Ġ// Ġlight Ġyellow ĊĠĠĠĠĠĠ 0 . 5 Ġto ĊĠĠĠĠĠĠĠ ĠColor RGB a . from Hex (" 5 A 7 6 8 7 "), Ġ// Ġdark Ġgray - blue ĊĠĠĠĠĠĠ 0 . 7 5 Ġto ĊĠĠĠĠĠĠĠ ĠColor RGB a . from Hex (" C 8 BAC 9 "), Ġ// Ġlight Ġpur ple ĊĠĠĠĠĠĠ 1 . 0 Ġto ĊĠĠĠĠĠĠĠ ĠColor RGB a . from Hex (" 5 E 5 9 7 8 "), Ġ// Ġdark Ġpur ple ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġvar Ġpacked Ġ= ĠPack Complete Result ( generate Moving B odies ( 8 0 0 , ĠVector 2 ( width Ġ* Ġ 0 . 5 , Ġheight Ġ* Ġ 0 . 5 ), Ġ 1 0 . 0 )) ĊĠĠĠ Ġextend Ġ{ ĊĠĠĠĠĠ Ġ// Ġget Ġthat Ġrng ĊĠĠĠĠĠ Ġval Ġrng Ġ= ĠRandom ( seed . to Long ()) ĊĊĠĠĠĠĠ Ġval Ġsize Fn Ġ= Ġ{ Ġbody : ĠMoving Body Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġtarget Radius Ġ= Ġmap ( ĊĠĠĠĠĠĠĠĠĠ Ġnoise Range . first , Ġnoise Range . second , ĊĠĠĠĠĠĠĠĠĠ Ġradius Range . first , Ġradius Range . second , ĊĠĠĠĠĠĠĠĠĠ Ġsimp lex ( seed , Ġbody . position Ġ/ Ġnoise Scale ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// Ġtechnically Ġthe Ġvalue Ġwill Ġnever Ġ" ar rive " Ġbut Ġit Ġgets Ġvery Ġclose Ġvery Ġfast Ġso , Ġy ' know Ġ... Ġgood Ġenough Ġfor Ġme ! ĊĠĠĠĠĠĠĠ Ġbody . radius Ġ= Ġabs ( body . radius Ġ+ Ġtarget Radius ) Ġ/ Ġ 2 . 0 ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġpacked Ġ= Ġpack Circ les Control led ( bodies Ġ= Ġpacked . bodies , Ġincremental Ġ= Ġtrue , Ġrng Ġ= Ġrng , Ġsize Fn Ġ= Ġsize Fn ) ĊĠĠĠĠĠ Ġpacked . bodies . forEach Indexed Ġ{ Ġindex , Ġbody Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġsh ade Ġ= Ġsimp lex ( seed , Ġbody . position . yx Ġ/ Ġnoise Scale ) Ġ* Ġ 0 . 5 Ġ+ Ġ 0 . 5 ĊĠĠĠĠĠĠĠ Ġdrawer . stroke Ġ= Ġspectrum . index ( shade ) ĊĠĠĠĠĠĠĠ Ġdrawer . fill Ġ= Ġspectrum . index ( shade ). op ac ify ( simp lex ( seed , Ġbody . position . xy 0 Ġ/ Ġnoise Scale ) Ġ* Ġ 0 . 2 5 Ġ+ Ġ 0 . 7 5 ) ĊĠĠĠĠĠĠĠ Ġdrawer . circle ( Circle ( body . position , Ġbody . radius )) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġ// Ġset Ġseed Ġfor Ġnext Ġiteration ĊĠĠĠĠĠ Ġif Ġ( screenshots . capture Every Frame ) Ġ{ ĊĠĠĠĠĠĠĠ Ġseed Ġ= Ġrandom ( 0 . 0 , ĠInt . MAX _ VALUE . toDouble ()). toInt () ĊĠĠĠĠĠĠĠ Ġscreenshots . name Ġ= Ġ" screenshots /$ prog Name /${ timestamp ()} - seed -$ seed . png " ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ