Vai al contenuto

Chaos game – 3

Con la regola del salto a metà distanza, si introduce una novità: la scelta del nuovo punto non è pienamente casuale.
Il salto può essere solo verso un certo sottoinsieme di punti.


Se i punti disponibili sono quelli con indice +1, +4, +7 si ottiene la figure seguente

DIM =800
spazio=50

GraphicsWindow.Width =DIM
GraphicsWindow.Height=DIM
GraphicsWindow.Title ="Tappeto: +1 +4 +7"

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

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

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

Ecco il risultato con +1 +3 +5 +7

...
rand=Math.GetRandomNumber(4)
If(rand=1) Then
   incr=1
ElseIf(rand=2) Then
   incr=3
ElseIf(rand=3) then
   incr=5
ElseIf(rand=4) then
   incr=7
EndIf 
indice=indice+incr
If(indice > 7) Then
   indice=indice-8
EndIf
...

Ecco il risultato con +2 +4 +6

If(rand=1) Then
   incr=2
ElseIf(rand=2) Then
   incr=4
Else
   incr=6
EndIf



Disponi i punti in circolo e poi sperimenta con le regole


4 punti, scelta +0 +1 +2

DIM   =800
spazio=50

GraphicsWindow.Width =DIM
GraphicsWindow.Height=DIM
GraphicsWindow.Title ="Tappeto rotondo: +0 +1 +2"

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(3)
  If(rand=1) Then
    incr=0
  ElseIf(rand=2) Then
    incr=1
  ElseIf(rand=3) then
    incr=2
  EndIf    
  indice=indice+incr
  If(indice > 3) Then
    indice=indice-4
  EndIf
  xx=(xx+x[indice])/2
  yy=(yy+y[indice])/2 
  GraphicsWindow.SetPixel(xx, yy, "#000000")
EndWhile

5 punti, +1+2+3+4, salto a metà

DIM =800
spazio=50

GraphicsWindow.Width =DIM
GraphicsWindow.Height=DIM
GraphicsWindow.Title ="Tappeto rotondo: 5 +1+2+3+4"

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(4)
   indice=indice+rand
   If(indice > 4) Then
      indice=indice-5
   EndIf
   xx=(xx+x[indice])/2
   yy=(yy+y[indice])/2 
   GraphicsWindow.SetPixel(xx, yy, "#000000")
EndWhile

6 punti, +0+3+4+5

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.