package Ġnoise Ċ Ċ import Ġorg . open rnd r . math . Vector 2 Ċ import Ġorg . open rnd r . math . Vector 3 Ċ import Ġorg . open rnd r . math . mix Ċ import Ġutil . b ilinear Interp Ċ import Ġjava . lang . Math . pow Ċ import Ġjava . lang . Math . sin Ċ import Ġkotlin . math . PI Ċ import Ġkotlin . math . atan 2 Ċ import Ġkotlin . math . cos Ċ import Ġkotlin . math . floor Ċ Ċ /* Ċ Resources : ĊĠ Ġhttps :// ad rian b . io / 2 0 1 4 / 0 8 / 0 9 / per lin noise . html ĊĠĠĠ Ġ- Ġthis Ġis Ġa Ġreally Ġdeep / hard Ġinterpretation ĊĠ Ġhttps :// the book of shaders . com / 1 1 / ĊĠĠĠ Ġ- Ġthis Ġis Ġpretty Ġapproach able , Ġgoing Ġto Ġstart Ġhere ĊĠ Ġhttps :// en . wikipedia . org / wiki / B ilinear _ interpolation ĊĠĠĠ Ġ- ĠFrom Ġthe Ġbook Ġof Ġshaders : ĊĠĠĠĠĠ Ġ" This Ġtechnique Ġis Ġall Ġabout Ġinterpol ating Ġrandom Ġvalues , Ġwhich Ġis Ġwhy Ġit 's Ġcalled Ġvalue Ġnoise ." ĊĠĠĠ Ġ- ĠFrom ĠW ikipedia : ĊĠĠĠĠĠ Ġ" In Ġmathematic s , Ġb ilinear Ġinterpolation Ġis Ġan Ġextension Ġof Ġlinear Ġinterpolation Ġfor Ġinterpol ating ĊĠĠĠĠĠĠ Ġfunctions Ġof Ġtwo Ġvariables Ġ( e . g ., Ġx Ġand Ġy ) Ġon Ġa Ġrect ilinear Ġ 2 D Ġgrid ." ĊĠĠĠ Ġ- ĠFormula Ġfor ĠUnit ĠSquare ĊĠĠĠĠĠ Ġf ( x , y ) Ġâī Ī Ġf ( 0 , 0 )( 1 âĪ Ĵ x )( 1 âĪ Ĵ y ) Ġ+ Ġf ( 1 , 0 ) x ( 1 âĪ Ĵ y ) Ġ+ Ġf ( 0 , 1 )( 1 âĪ Ĵ x ) y Ġ+ Ġf ( 1 , 1 ) xy ĊĠ Ġhttps :// en . wikipedia . org / wiki / B ic ubic _ interpolation ĊĠĠĠ Ġ- ĠFrom ĠW ikipedia : ĊĠĠĠĠĠ Ġ" In Ġimage Ġprocessing , Ġb ic ubic Ġinterpolation Ġis Ġoften Ġchosen Ġover Ġb ilinear Ġor Ġnearest - neighbor Ġinterpolation ĊĠĠĠĠĠĠ Ġin Ġimage Ġres ampling , Ġwhen Ġspeed Ġis Ġnot Ġan Ġissue . ĠIn Ġcontrast Ġto Ġb ilinear Ġinterpolation , Ġwhich Ġonly Ġtakes ĊĠĠĠĠĠĠĠ 4 Ġpixels Ġ( 2 ÃĹ 2 ) Ġinto Ġaccount , Ġb ic ubic Ġinterpolation Ġcons iders Ġ 1 6 Ġpixels Ġ( 4 ÃĹ 4 ). ĠImages Ġres ample d Ġwith ĊĠĠĠĠĠĠ Ġb ic ubic Ġinterpolation Ġare Ġsm oo ther Ġand Ġhave Ġfewer Ġinterpolation Ġartifacts ." ĊĠĠĠ Ġ- ĠFrom ĠEric : Ġthis Ġlooks Ġf uck ing Ġhard Ġas Ġhe ll , Ġthis Ġwill Ġhave Ġto Ġbe Ġa Ġfuture Ġproject . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJust Ġglad Ġto Ġknow Ġwhat Ġthis Ġis Ġfor Ġnow Ġand Ġbuild Ġa Ġlibrary Ġof Ġthings Ġto Ġlearn Ġin Ġthe Ġfuture . Ċ */ Ċ Ċ // Ġsim ulating ĠGL SL Ġvector Ġmethods Ċ fun ĠVector 2 . floor () Ġ= ĠVector 2 ( floor ( this . x ), Ġfloor ( this . y )) Ċ fun ĠVector 2 . fract () Ġ= ĠVector 2 ( this . x Ġ- Ġfloor ( this . x ), Ġthis . y Ġ- Ġfloor ( this . y )) Ċ Ċ fun ĠVector 3 . floor () Ġ= ĠVector 3 ( floor ( this . x ), Ġfloor ( this . y ), Ġfloor ( this . z )) Ċ fun ĠVector 3 . fract () Ġ= ĠVector 3 ( this . x Ġ- Ġfloor ( this . x ), Ġthis . y Ġ- Ġfloor ( this . y ), Ġthis . z Ġ- Ġfloor ( this . z )) Ċ Ċ fun Ġfade ( t : ĠDouble ): ĠDouble Ġ= ĊĠ Ġt Ġ* Ġt Ġ* Ġt Ġ* Ġ( t Ġ* Ġ( t Ġ* Ġ 6 Ġ- Ġ 1 5 ) Ġ+ Ġ 1 0 ) Ġ// Ġ 6 t ^ 5 Ġ- Ġ 1 5 t ^ 4 Ġ+ Ġ 1 0 t ^ 3 Ġ--> Ġmore Ġsh arp ; Ġ" Per lin 's Ġimproved Ġnoise Ġcurve " Ċ // Ġt Ġ* Ġt Ġ* Ġ( t Ġ* Ġ- 2 . 0 Ġ+ Ġ 3 . 0 ) Ġ// Ġ 3 t ^ 2 Ġ- Ġ 2 t ^ 3 Ġ--> Ġmore Ġrolling ; Ġ" Cubic ĠH ermine ĠCurve " Ċ Ċ fun Ġfade ( v : ĠVector 2 ): ĠVector 2 Ġ= ĠVector 2 ( fade ( v . x ), Ġfade ( v . y )) Ċ fun Ġfade ( v : ĠVector 3 ): ĠVector 3 Ġ= ĠVector 3 ( fade ( v . x ), Ġfade ( v . y ), Ġfade ( v . z )) Ċ Ċ /** Ċ Ġ* ĠCustom Ġnoise Ġfunction . Ċ Ġ* ĠBasic ally Ġcopied Ġfrom Ġhttps :// the book of shaders . com / 1 1 / Ċ Ġ*/ Ċ fun Ġvalue Noise 2 D ( vec : ĠVector 2 , Ġmem Random : Ġ( Vector 2 ) Ġ-> ĠDouble ): ĠDouble Ġ{ ĊĠ Ġ// Ġget Ġinteger Ġand Ġfraction al Ġcomponents Ġof Ġinput ĊĠ Ġval Ġi Ġ= Ġvec . floor () ĊĠ Ġval Ġfr act Ġ= Ġvec . fract () ĊĊĠ Ġ// ĠFour Ġcorners Ġin Ġ 2 D Ġof Ġa Ġtile ĊĠ Ġval Ġa Ġ= Ġmem Random ( i ) ĊĠ Ġval Ġb Ġ= Ġmem Random ( i Ġ+ ĠVector 2 ( 1 . 0 , Ġ 0 . 0 )) ĊĠ Ġval Ġc Ġ= Ġmem Random ( i Ġ+ ĠVector 2 ( 0 . 0 , Ġ 1 . 0 )) ĊĠ Ġval Ġd Ġ= Ġmem Random ( i Ġ+ ĠVector 2 ( 1 . 0 , Ġ 1 . 0 )) ĊĊĠ Ġ// ĠSm ooth ĠInterpol ation ĊĠ Ġval Ġu Ġ= Ġfade ( fract ) ĊĊĠ Ġ// ĠMix Ġ 4 Ġcorners Ġpercent ages ĊĠ Ġ// Ġthis Ġis Ġactually Ġvery Ġimportant Ġand Ġprecise ! ĊĠ Ġ// ĠTo Ġlearn Ġmore Ġabout Ġthis , Ġsee Ġ" B ilinear ĠInterpol ation " ĊĠ Ġ// Ġhttps :// en . wikipedia . org / wiki / B ilinear _ interpolation # Unit _ square ĊĠ Ġreturn Ġmix ( a , Ġb , Ġu . x ) Ġ+ ĊĠĠĠ Ġ( c Ġ- Ġa ) Ġ* Ġu . y Ġ* Ġ( 1 . 0 Ġ- Ġu . x ) Ġ+ ĊĠĠĠ Ġ( d Ġ- Ġb ) Ġ* Ġu . x Ġ* Ġu . y Ċ } Ċ Ċ /** Ċ Ġ* ĠCalculate Ġa Ġnet Ġ" effect " Ġof Ġthe Ġvector Ċ Ġ* Ġ@ return ĠDouble Ġin Ġrange Ġ[ 0 . 0 , Ġ< vec . length >] Ċ Ġ*/ Ċ fun Ġvec Effect ( vec : ĠVector 2 ): ĠDouble Ġ= ĊĠ Ġvec . length Ġ* Ġatan 2 ( vec . y , Ġvec . x ) Ġ/ Ġ 2 . 0 Ġ/ ĠPI Ċ Ċ /** Ċ Ġ* ĠCustom Ġnoise Ġfunction Ċ Ġ* ĠImport ant Ġnotes Ċ Ġ* Ġ Ġ- Ġcreates Ġsome Ġocc ass ional Ġartifacts Ġaround Ġthe Ġborder Ċ Ġ* Ġ Ġ- Ġdoes ĠNOT Ġtile Ġwell ... Ċ Ġ* ĠOf Ġcourse , Ġgot ta Ġname Ġit Ġsomething ĠðŁĺ Ľ Ċ Ġ*/ Ċ fun Ġy ance y Noise V 1 ( vec : ĠVector 2 , Ġmem Random : Ġ( Vector 2 ) Ġ-> ĠVector 2 , Ġnormal izer I sh Thing y : ĠBoolean Ġ= Ġfalse ): ĠDouble Ġ{ ĊĠ Ġ// Ġget Ġinteger Ġand Ġfraction al Ġcomponents Ġof Ġinput ĊĠ Ġval Ġi 1 Ġ= Ġvec . floor () ĊĠ Ġval Ġi 2 Ġ= Ġi 1 Ġ+ ĠVector 2 ( 1 . 0 , Ġ 0 . 0 ) ĊĠ Ġval Ġi 3 Ġ= Ġi 1 Ġ+ ĠVector 2 ( 0 . 0 , Ġ 1 . 0 ) ĊĠ Ġval Ġi 4 Ġ= Ġi 1 Ġ+ ĠVector 2 ( 1 . 0 , Ġ 1 . 0 ) ĊĊĠ Ġval Ġfr act Ġ= Ġvec . fract () ĊĊĠ Ġ// ĠFour Ġcorners Ġin Ġ 2 D Ġof Ġa Ġtile ĊĠ Ġ// Ġeach Ġcorner Ġis Ġa Ġ" pseudo Ġrandom Ġgradient " Ġ- Ġthat Ġis , Ġa ĠVector 2 Ġpointing Ġin Ġa Ġrandom Ġdirection ĊĠ Ġval Ġgrad 1 Ġ= Ġmem Random ( i 1 ) ĊĠ Ġval Ġgrad 2 Ġ= Ġmem Random ( i 2 ) ĊĠ Ġval Ġgrad 3 Ġ= Ġmem Random ( i 3 ) ĊĠ Ġval Ġgrad 4 Ġ= Ġmem Random ( i 4 ) ĊĊĠ Ġval Ġdist 1 Ġ= Ġ( fract Ġ- Ġi 1 ) ĊĠ Ġval Ġdist 2 Ġ= Ġ( fract Ġ- Ġi 2 ) ĊĠ Ġval Ġdist 3 Ġ= Ġ( fract Ġ- Ġi 3 ) ĊĠ Ġval Ġdist 4 Ġ= Ġ( fract Ġ- Ġi 4 ) ĊĊĠ Ġvar Ġweighted 1 Ġ= Ġgrad 1 Ġ/ Ġdist 1 . length ĊĠ Ġvar Ġweighted 2 Ġ= Ġgrad 2 Ġ/ Ġdist 2 . length ĊĠ Ġvar Ġweighted 3 Ġ= Ġgrad 3 Ġ/ Ġdist 3 . length ĊĠ Ġvar Ġweighted 4 Ġ= Ġgrad 4 Ġ/ Ġdist 4 . length ĊĊĠ Ġ// Ġh mm m , ĠI Ġlike Ġthis Ġidea , Ġnormal izing Ġby Ġthe Ġlongest Ġweighted Ġvector ĊĠ Ġ// Ġbut Ġis Ġthere Ġa Ġbetter Ġway ???? ? ĊĠ Ġif Ġ( normal izer I sh Thing y ) Ġ{ ĊĠĠĠ Ġval ĠmaxLength Ġ= ĠlistOf ( weighted 1 . length , Ġweighted 2 . length , Ġweighted 3 . length , Ġweighted 4 . length ). max () !! ĊĠĠĠ Ġweighted 1 Ġ= Ġweighted 1 . normalized Ġ* Ġ( weighted 1 . length Ġ/ ĠmaxLength ) ĊĠĠĠ Ġweighted 2 Ġ= Ġweighted 2 . normalized Ġ* Ġ( weighted 2 . length Ġ/ ĠmaxLength ) ĊĠĠĠ Ġweighted 3 Ġ= Ġweighted 3 . normalized Ġ* Ġ( weighted 3 . length Ġ/ ĠmaxLength ) ĊĠĠĠ Ġweighted 4 Ġ= Ġweighted 4 . normalized Ġ* Ġ( weighted 4 . length Ġ/ ĠmaxLength ) ĊĠ Ġ} ĊĊĠ Ġ// ĠSm ooth ĠInterpol ation ĊĠ Ġval Ġu Ġ= Ġfade ( fract ) ĊĊĠ Ġ// Ġ ĠThe Ġfinal Ġmix ... ĊĠ Ġ// ĠH AR DER ĠTH AN ĠYOU ' D ĠTH INK ! ĊĠ Ġval Ġx 1 Ġ= Ġmix ( weighted 1 . dot ( dist 1 ), Ġweighted 2 . dot ( dist 2 ), Ġu . x ) ĊĠ Ġval Ġx 2 Ġ= Ġmix ( weighted 3 . dot ( dist 3 ), Ġweighted 4 . dot ( dist 4 ), Ġu . x ) ĊĠ Ġreturn Ġmix ( x 1 , Ġx 2 , Ġu . y ) Ċ } Ċ Ċ // Ġthis Ġis Ġeffectively Ġjust Ġa Ġdifferent Ġway Ġof Ġdoing Ġvalue Ġnoise , Ġsince Ġthis Ġis Ġa Ġpseudo - random Ġresult Ċ fun Ġweird Trig Sh it ( vec : ĠVector 2 ): ĠDouble Ġ{ ĊĠ Ġ// Ġreturn Ġcos ( atan 2 ( vec . y , Ġvec . x ) Ġ* Ġatan 2 ( vec . y , Ġ 1 . 0 Ġ/ Ġvec . x ) Ġ+ ĊĠ Ġ// ĠĠ Ġsin ( pow ( cos ( vec . x ), Ġ 2 . 0 ) Ġ- Ġpow ( sin ( vec . y ), Ġ 2 . 0 ) Ġ* Ġvec . squared Length )) ĊĊĠ Ġreturn Ġ 0 . 7 Ġ- Ġcos ( ĊĠĠĠ Ġatan 2 ( vec . y , Ġvec . x ) Ġ* Ġatan 2 ( vec . per pend icular (). x , Ġ 1 . 0 Ġ/ Ġvec . per pend icular (). y ) Ġ+ ĊĠĠĠĠĠ Ġpow ( sin ( pow ( cos ( vec . x ), Ġ 2 . 0 ) Ġ- Ġpow ( sin ( vec . y ), Ġ 2 . 0 ) Ġ* Ġvec . squared Length ), Ġ 2 . 0 ) ĊĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠCustom Ġvalue Ġnoise Ġfunction Ġ" generator ". Ċ Ġ* ĠDesign ed Ġas Ġgenerator Ġto Ġac com od ate Ġcurl Ċ Ġ* ĠImport ant Ġnotes Ċ Ġ* Ġ Ġ- ĠT iles Ġproperly , Ġthanks Ġto ĠB ilinear ĠInterpol ation !!! Ċ Ġ* Ġ Ġ- ĠSimple Ġ" value Ġnoise " Ġimplementation , Ċ Ġ* ĠĠĠ Ġwhere Ġ" value " Ġis Ġdetermined Ġby Ġthe Ġmemoized Ġfunction Ġpassed Ġin . Ċ Ġ* ĠOf Ġcourse , Ġgot ta Ġname Ġit Ġsomething ĠðŁĺ Ľ Ċ Ġ*/ Ċ fun Ġy ance y Noise Generator ( memo ized : Ġ( Vector 2 ) Ġ-> ĠDouble ): Ġ( Vector 2 ) Ġ-> ĠDouble Ġ{ ĊĠ Ġreturn Ġ{ Ġvec : ĠVector 2 Ġ-> ĊĠĠĠ Ġ// Ġget Ġinteger Ġand Ġfraction al Ġcomponents Ġof Ġinput ĊĠĠĠ Ġval Ġi 1 Ġ= Ġvec . floor () ĊĠĠĠ Ġval Ġi 2 Ġ= Ġi 1 Ġ+ ĠVector 2 ( 1 . 0 , Ġ 0 . 0 ) ĊĠĠĠ Ġval Ġi 3 Ġ= Ġi 1 Ġ+ ĠVector 2 ( 0 . 0 , Ġ 1 . 0 ) ĊĠĠĠ Ġval Ġi 4 Ġ= Ġi 1 Ġ+ ĠVector 2 ( 1 . 0 , Ġ 1 . 0 ) ĊĠĠĠ Ġval Ġfr act Ġ= Ġvec . fract () ĊĊĠĠĠ Ġ// ĠFour Ġcorners Ġin Ġ 2 D Ġof Ġa Ġtile ĊĠĠĠ Ġval Ġa Ġ= Ġmemoized ( i 1 ) ĊĠĠĠ Ġval Ġb Ġ= Ġmemoized ( i 2 ) ĊĠĠĠ Ġval Ġc Ġ= Ġmemoized ( i 3 ) ĊĠĠĠ Ġval Ġd Ġ= Ġmemoized ( i 4 ) ĊĊĠĠĠ Ġ// ĠSm ooth ĠInterpol ation ĊĠĠĠ Ġval Ġu Ġ= Ġfade ( fract ) ĊĊĠĠĠ Ġb ilinear Interp ( a , Ġb , Ġc , Ġd , Ġu ) ĊĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠCustom Ġnoise Ġfunction Ċ Ġ* ĠImport ant Ġnotes Ċ Ġ* Ġ Ġ- Ġcreates Ġsome Ġocc ass ional Ġartifacts Ġaround Ġthe Ġborder Ċ Ġ* Ġ Ġ- Ġdoes ĠNOT Ġtile Ġwell ... Ċ Ġ* ĠOf Ġcourse , Ġgot ta Ġname Ġit Ġsomething ĠðŁĺ Ľ Ċ Ġ*/ Ċ fun Ġy ance y Noise V 3 ( vec : ĠVector 2 , Ġmemo : Ġ( Vector 2 ) Ġ-> ĠVector 2 , Ġnormal izer I sh Thing y : ĠBoolean Ġ= Ġfalse ): ĠDouble Ġ{ ĊĠ Ġ// Ġget Ġinteger Ġand Ġfraction al Ġcomponents Ġof Ġinput ĊĠ Ġval Ġi 1 Ġ= Ġvec . floor () ĊĠ Ġval Ġi 2 Ġ= Ġi 1 Ġ+ ĠVector 2 ( 1 . 0 , Ġ 0 . 0 ) ĊĠ Ġval Ġi 3 Ġ= Ġi 1 Ġ+ ĠVector 2 ( 0 . 0 , Ġ 1 . 0 ) ĊĠ Ġval Ġi 4 Ġ= Ġi 1 Ġ+ ĠVector 2 ( 1 . 0 , Ġ 1 . 0 ) ĊĊĠ Ġval Ġfr act Ġ= Ġvec . fract () ĊĊĠ Ġ// ĠFour Ġcorners Ġin Ġ 2 D Ġof Ġa Ġtile ĊĠ Ġ// Ġeach Ġcorner Ġis Ġa Ġ" pseudo Ġrandom Ġgradient " Ġ- Ġthat Ġis , Ġa ĠVector 2 Ġpointing Ġin Ġa Ġrandom Ġdirection ĊĠ Ġval Ġgrad 1 Ġ= Ġmemo ( i 1 ) ĊĠ Ġval Ġgrad 2 Ġ= Ġmemo ( i 2 ) ĊĠ Ġval Ġgrad 3 Ġ= Ġmemo ( i 3 ) ĊĠ Ġval Ġgrad 4 Ġ= Ġmemo ( i 4 ) ĊĊĠ Ġval Ġdist 1 Ġ= Ġ( fract Ġ- ĠVector 2 ( 0 . 5 , Ġ 0 . 5 ) Ġ- Ġi 1 ) ĊĠ Ġval Ġdist 2 Ġ= Ġ( fract Ġ- ĠVector 2 ( 0 . 5 , Ġ 0 . 5 ) Ġ- Ġi 2 ) ĊĠ Ġval Ġdist 3 Ġ= Ġ( fract Ġ- ĠVector 2 ( 0 . 5 , Ġ 0 . 5 ) Ġ- Ġi 3 ) ĊĠ Ġval Ġdist 4 Ġ= Ġ( fract Ġ- ĠVector 2 ( 0 . 5 , Ġ 0 . 5 ) Ġ- Ġi 4 ) ĊĊĠ Ġvar Ġweighted 1 Ġ= Ġgrad 1 Ġ/ Ġdist 1 . length ĊĠ Ġvar Ġweighted 2 Ġ= Ġgrad 2 Ġ/ Ġdist 2 . length ĊĠ Ġvar Ġweighted 3 Ġ= Ġgrad 3 Ġ/ Ġdist 3 . length ĊĠ Ġvar Ġweighted 4 Ġ= Ġgrad 4 Ġ/ Ġdist 4 . length ĊĊĠ Ġ// Ġh mm m , ĠI Ġlike Ġthis Ġidea , Ġnormal izing Ġby Ġthe Ġlongest Ġweighted Ġvector ĊĠ Ġ// Ġbut Ġis Ġthere Ġa Ġbetter Ġway ???? ? ĊĠ Ġif Ġ( normal izer I sh Thing y ) Ġ{ ĊĠĠĠ Ġval ĠmaxLength Ġ= ĠlistOf ( weighted 1 . length , Ġweighted 2 . length , Ġweighted 3 . length , Ġweighted 4 . length ). max () !! ĊĠĠĠ Ġweighted 1 Ġ= Ġweighted 1 . normalized Ġ* Ġ( weighted 1 . length Ġ/ ĠmaxLength ) ĊĠĠĠ Ġweighted 2 Ġ= Ġweighted 2 . normalized Ġ* Ġ( weighted 2 . length Ġ/ ĠmaxLength ) ĊĠĠĠ Ġweighted 3 Ġ= Ġweighted 3 . normalized Ġ* Ġ( weighted 3 . length Ġ/ ĠmaxLength ) ĊĠĠĠ Ġweighted 4 Ġ= Ġweighted 4 . normalized Ġ* Ġ( weighted 4 . length Ġ/ ĠmaxLength ) ĊĠ Ġ} ĊĊĠ Ġ// ĠSm ooth ĠInterpol ation ĊĠ Ġval Ġu Ġ= Ġfade ( fract ) ĊĊĠ Ġ// Ġ ĠThe Ġfinal Ġmix ... ĊĠ Ġreturn Ġb ilinear Interp ( ĊĠĠĠ Ġ// Ġvec Effect ( grad 1 ), ĊĠĠĠ Ġ// Ġvec Effect ( grad 2 ), ĊĠĠĠ Ġ// Ġvec Effect ( grad 3 ), ĊĠĠĠ Ġ// Ġvec Effect ( grad 4 ), ĊĠĠĠ Ġweighted 1 . dot ( dist 1 ), ĊĠĠĠ Ġweighted 2 . dot ( dist 2 ), ĊĠĠĠ Ġweighted 3 . dot ( dist 3 ), ĊĠĠĠ Ġweighted 4 . dot ( dist 4 ), ĊĠĠĠ Ġu ĊĠ Ġ) Ċ } Ċ