Vai al contenuto

Chaos game – 2

Cambia la regola per il salto: si va a due terzi della distanza tra i due punti

xx=(xx+2*x[rand])/3
yy=(yy+2*y[rand])/3

Aggiungendo un 5° punto al centro si ottiene il frattale di Vicsek!

DIM   =800
spazio=50

GraphicsWindow.Width =DIM
GraphicsWindow.Height=DIM
GraphicsWindow.Title ="Frattale di Vicsek"

x[1]=spazio
y[1]=spazio
x[2]=DIM-spazio
y[2]=spazio
x[3]=spazio
y[3]=DIM-spazio
x[4]=DIM-spazio
y[4]=DIM-spazio
x[5]=DIM/2
y[5]=DIM/2

GraphicsWindow.BrushColor="#99FFFF00"
For i=1 To 5
   GraphicsWindow.FillEllipse(x[i]-10,y[i]-10,20,20)
EndFor

xx=x[1]
yy=y[1]

While "true"
   rand=Math.GetRandomNumber(5)
   xx=(xx+2*x[rand])/3
   yy=(yy+2*y[rand])/3 
GraphicsWindow.SetPixel(xx, yy, "#000000")
EndWhile

Tappeto di Sierpinski: con 8 punti disposti sui lati di un quadrato

DIM   =800
spazio=50
 
GraphicsWindow.Width =DIM
GraphicsWindow.Height=DIM
GraphicsWindow.Title ="Tappeto di Sierpinski"

x[1]=spazio
y[1]=spazio
x[2]=DIM/2
y[2]=spazio
x[3]=DIM-spazio
y[3]=spazio
x[4]=spazio
y[4]=DIM/2
x[5]=DIM-spazio
y[5]=DIM/2
x[6]=spazio
y[6]=DIM-spazio
x[7]=DIM/2
y[7]=DIM-spazio
x[8]=DIM-spazio
y[8]=DIM-spazio

GraphicsWindow.BrushColor="#99FFFF00"
For i=1 To 8
   GraphicsWindow.FillEllipse(x[i]-10,y[i]-10,20,20)
EndFor

xx=x[1]
yy=y[1]
While "true"
   rand=Math.GetRandomNumber(8)
   xx=(xx+2*x[rand])/3
   yy=(yy+2*y[rand])/3 
   GraphicsWindow.SetPixel(xx, yy, "#000000")
EndWhile

Prova a sperimentare, per esempio escludendo uno dei punti



Disponi i punti in circolo: 4 punti

DIM =800
spazio=50

GraphicsWindow.Width =DIM
GraphicsWindow.Height=DIM
GraphicsWindow.Title ="Tappeto rotondo: 4 punti"

x[0]=DIM/2
y[0]=spazio
x[1]=DIM-spazio
y[1]=DIM/2
x[2]=DIM/2
y[2]=DIM-spazio
x[3]=spazio
y[3]=DIM/2

GraphicsWindow.BrushColor="#99FFFF00"
For i=0 To 3
   GraphicsWindow.FillEllipse(x[i]-10,y[i]-10,20,20)
EndFor

indice=0
xx=x[indice]
yy=y[indice]
While "true"
   rand=Math.GetRandomNumber(4)-1
   indice=indice+rand
   If(indice > 3) Then
      indice=indice-4
   EndIf
   xx=(xx+2*x[indice])/3
   yy=(yy+2*y[indice])/3 
   GraphicsWindow.SetPixel(xx, yy, "#000000")
EndWhile

4 punti + il punto centrale

5 punti

DIM =800
spazio=50

GraphicsWindow.Width =DIM
GraphicsWindow.Height=DIM
GraphicsWindow.Title ="Tappeto rotondo: 5 punti"

DIM2=DIM/2
RAGGIO=(DIM-spazio)/2
angolo=90
deltaAngolo=360/5
For indice=0 To 4
   alfa=Math.GetRadians(angolo)
   x[indice]=DIM2+RAGGIO*Math.Cos(alfa)
   y[indice]=DIM2-RAGGIO*Math.Sin(alfa)
   angolo=angolo+deltaAngolo
EndFor

GraphicsWindow.BrushColor="#99FFFF00"
For i=0 To 4
   GraphicsWindow.FillEllipse(x[i]-10,y[i]-10,20,20)
EndFor

indice=0
xx=x[indice]
yy=y[indice]
While "true"
   rand=Math.GetRandomNumber(5)-1
   indice=indice+rand
   If(indice > 4) Then
      indice=indice-5
   EndIf
   xx=(xx+2*x[indice])/3
   yy=(yy+2*y[indice])/3 
   GraphicsWindow.SetPixel(xx, yy, "#000000")
EndWhile

5 punti + il punto centrale

6 punti

6+1

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.