package Ġcom . lar val abs . b oo Ċ Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Path Ċ import Ġkotlin . math . cos Ċ import Ġkotlin . math . sin Ċ import Ġkotlin . math . sqrt Ċ Ċ class ĠB ubble Ġ{ ĊĊĠ Ġprivate Ġval Ġrotation Periods : ĠInt Array Ġ= ĠInt Array ( 8 ) ĊĊĠ Ġprivate Ġval Ġpath : ĠPath ĊĊĠ Ġprivate Ġval Ġtest Paint : ĠPaint ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 7 ) Ġ{ ĊĠĠĠĠĠ Ġrotation Periods [ i ] Ġ= ĠMath Utils . random ( MIN _ PERIOD , ĠMAX _ PERIOD ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġpath Ġ= ĠPath () ĊĠĠĠ Ġtest Paint Ġ= ĠPaint () ĊĠĠĠ Ġtest Paint . is Anti Alias Ġ= Ġtrue ĊĠ Ġ} ĊĊĠ Ġfun Ġdraw ( canvas : ĠCanvas , Ġpaint : ĠPaint , Ġsize : ĠFloat , Ġt : ĠLong ) Ġ{ ĊĠĠĠ Ġpath . reset () ĊĠĠĠ Ġvar Ġi Theta : ĠFloat ĊĠĠĠ Ġvar Ġj Theta : ĠFloat ĊĠĠĠ Ġvar Ġi X : ĠFloat ĊĠĠĠ Ġvar Ġi Y : ĠFloat ĊĠĠĠ Ġvar Ġj X : ĠFloat ĊĠĠĠ Ġvar Ġj Y : ĠFloat ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 7 ) Ġ{ ĊĠĠĠĠĠ Ġval Ġj Ġ= Ġ( i Ġ+ Ġ 1 ) Ġ% Ġ 8 ĊĠĠĠĠĠ Ġi Theta Ġ= ĠMath Utils . cycle ( t , Ġrotation Periods [ i ]. toFloat ()) Ġ* ĠMath Utils . TWO _ PI ĊĠĠĠĠĠ Ġj Theta Ġ= ĠMath Utils . cycle ( t , Ġrotation Periods [ j ]. toFloat ()) Ġ* ĠMath Utils . TWO _ PI ĊĠĠĠĠĠ Ġi X Ġ= Ġ( cos ( i Theta . toDouble ()) Ġ* Ġsize . toDouble () Ġ* ĠW OB BLE _ AMOUNT . toDouble ()). toFloat () ĊĠĠĠĠĠ Ġi Y Ġ= Ġ( sin ( i Theta . toDouble ()) Ġ* Ġsize . toDouble () Ġ* ĠW OB BLE _ AMOUNT . toDouble ()). toFloat () ĊĠĠĠĠĠ Ġj X Ġ= Ġ( cos ( j Theta . toDouble ()) Ġ* Ġsize . toDouble () Ġ* ĠW OB BLE _ AMOUNT . toDouble ()). toFloat () ĊĠĠĠĠĠ Ġj Y Ġ= Ġ( sin ( j Theta . toDouble ()) Ġ* Ġsize . toDouble () Ġ* ĠW OB BLE _ AMOUNT . toDouble ()). toFloat () ĊĠĠĠĠĠ Ġif Ġ( i Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpath . moveTo ( CIR CLE _ 8 _ X [ i ] Ġ* Ġsize Ġ+ Ġi X , ĠC IR CLE _ 8 _ Y [ i ] Ġ* Ġsize Ġ+ Ġi Y ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġpath . cubic To ( CIR CLE _ 8 _ BX [ i ] Ġ* Ġsize Ġ+ Ġi X , ĠC IR CLE _ 8 _ BY [ i ] Ġ* Ġsize Ġ+ Ġi Y , ĠC IR CLE _ 8 _ AX [ j ] Ġ* Ġsize Ġ+ Ġj X , ĠC IR CLE _ 8 _ AY [ j ] Ġ* Ġsize Ġ+ Ġj Y , ĠC IR CLE _ 8 _ X [ j ] Ġ* Ġsize Ġ+ Ġj X , ĠC IR CLE _ 8 _ Y [ j ] Ġ* Ġsize Ġ+ Ġj Y ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġpath . close () ĊĠĠĠ Ġcanvas . draw Path ( path , Ġpaint ) ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠSPL INE _ 8 Ġ= Ġ 0 . 2 6 5 2 0 3 1 f ĊĠĠĠ Ġprivate Ġval ĠS Q RT _ HALF Ġ= Ġsqrt ( 0 . 5 ). toFloat () ĊĊĠĠĠ Ġprivate Ġval ĠC IR CLE _ 8 _ X Ġ= Ġfloat ArrayOf ( 0 f , ĠS Q RT _ HALF , Ġ 1 f , ĠS Q RT _ HALF , Ġ 0 f , Ġ- SQ RT _ HALF , Ġ- 1 f , Ġ- SQ RT _ HALF ) ĊĊĠĠĠ Ġprivate Ġval ĠC IR CLE _ 8 _ Y Ġ= Ġfloat ArrayOf ( 1 f , ĠS Q RT _ HALF , Ġ 0 f , Ġ- SQ RT _ HALF , Ġ- 1 f , Ġ- SQ RT _ HALF , Ġ 0 f , ĠS Q RT _ HALF ) ĊĊĠĠĠ Ġprivate Ġval ĠC IR CLE _ 8 _ TH ETA Ġ= Ġfloat ArrayOf ( 0 f , Ġ- Math Utils . PI _ OVER _ 4 , Ġ- Math Utils . PI _ OVER _ 2 , Ġ- 3 Ġ* ĠMath Utils . PI _ OVER _ 4 , ĠMath Utils . PI , Ġ 3 Ġ* ĠMath Utils . PI _ OVER _ 4 , ĠMath Utils . PI _ OVER _ 2 , ĠMath Utils . PI _ OVER _ 4 ) ĊĊĠĠĠ Ġprivate Ġval ĠC IR CLE _ 8 _ AX Ġ= ĠFloat Array ( 8 ) ĊĠĠĠ Ġprivate Ġval ĠC IR CLE _ 8 _ AY Ġ= ĠFloat Array ( 8 ) ĊĠĠĠ Ġprivate Ġval ĠC IR CLE _ 8 _ BX Ġ= ĠFloat Array ( 8 ) ĊĠĠĠ Ġprivate Ġval ĠC IR CLE _ 8 _ BY Ġ= ĠFloat Array ( 8 ) ĊĊĠĠĠ Ġprivate Ġval ĠTEST _ COLORS Ġ= ĠInt Array ( 8 ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ Ġval Ġh sv Ġ= ĠFloat Array ( 3 ) ĊĠĠĠĠĠ Ġh sv [ 1 ] Ġ= Ġ 1 f ĊĠĠĠĠĠ Ġh sv [ 2 ] Ġ= Ġ 1 f ĊĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 7 ) Ġ{ ĊĠĠĠĠĠĠĠ ĠC IR CLE _ 8 _ AX [ i ] Ġ= Ġ( CIR CLE _ 8 _ X [ i ] Ġ- Ġcos ( CIR CLE _ 8 _ TH ETA [ i ]. toDouble ()) Ġ* ĠSPL INE _ 8 ). toFloat () ĊĠĠĠĠĠĠĠ ĠC IR CLE _ 8 _ BX [ i ] Ġ= Ġ( CIR CLE _ 8 _ X [ i ] Ġ+ Ġcos ( CIR CLE _ 8 _ TH ETA [ i ]. toDouble ()) Ġ* ĠSPL INE _ 8 ). toFloat () ĊĠĠĠĠĠĠĠ ĠC IR CLE _ 8 _ AY [ i ] Ġ= Ġ( CIR CLE _ 8 _ Y [ i ] Ġ- Ġsin ( CIR CLE _ 8 _ TH ETA [ i ]. toDouble ()) Ġ* ĠSPL INE _ 8 ). toFloat () ĊĠĠĠĠĠĠĠ ĠC IR CLE _ 8 _ BY [ i ] Ġ= Ġ( CIR CLE _ 8 _ Y [ i ] Ġ+ Ġsin ( CIR CLE _ 8 _ TH ETA [ i ]. toDouble ()) Ġ* ĠSPL INE _ 8 ). toFloat () ĊĠĠĠĠĠĠĠ Ġh sv [ 0 ] Ġ= Ġi Ġ* Ġ 3 6 0 Ġ/ Ġ 8 f ĊĠĠĠĠĠĠĠ ĠTEST _ COLORS [ i ] Ġ= Ġ- 0 x 7 f 0 0 0 0 0 1 Ġand ĠColor . H SV To Color ( h sv ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠMIN _ PERIOD Ġ= Ġ 1 5 0 0 ĊĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ PERIOD Ġ= Ġ 2 5 0 0 ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠW OB BLE _ AMOUNT Ġ= Ġ 0 . 0 3 5 f ĊĠ Ġ} Ċ Ċ } Ċ