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