Napisałem program w Small Basicu, który generuje dywan Sierpińskiego. Procedura jest prosta. Ustala się położenie ośmiu punktów, cztery w narożach kwadratu i jeszcze cztery w połowie długości boków kwadratu. Potem wybiera się dowolny punkt i losuje jesten z ustalonych punktów. W następnym kroku ustala się punkt leżący w połowie odległości pomiędzy punktem wybranym a wylosowanym. Procedurę się powtarza. W wyniku powtórzenia jae bardzo dużą liczbę razy, otrzymuje się rysunek jak poniżej (Program 1):
Dywan Sierpińskiego otrzymany z gry w chaos |
Teksty programów, które realizują opisane algorytmy:
'Program 1. Dywan
Sierpińskiego utworzony z za pomocą gry w chaos
trans_x=500 'umiejscowienie
punktu (0,0) na ekranie
trans_y=400
scale= 100 'skala
rysowania 100 dla a=0.69
xw[1] = 1 'wierzchołki i punkty na bokach kwadratu
yw[1] = 1
xw[2] = 1
yw[2] =-1
xw[3] =-1
yw[3] =-1
xw[4] =-1
yw[4] = 1
xw[5] = 1
yw[5] = 0
xw[6] = 0
yw[6] =-1
xw[7] =-1
yw[7] = 0
xw[8] = 0
yw[8] = 1
x=0.1
y=0.1
a = 0.69 'dla 0.69 mamy okno Sierpińskiego i skali 100
GraphicsWindow.Width=1000
GraphicsWindow.Height=800
For i = 1 To 4000000
rog = math.GetRandomNumber(8) 'losowanie numeru
punktu kwadratu
x = x - (x - xw[rog]) / a
y = y - (y - yw[rog]) / a
x_screen=x*scale +trans_x
y_screen=y*scale +trans_y
GraphicsWindow.SetPixel(x_screen, y_screen, "blue")
GraphicsWindow.DrawEllipse(trans_x,trans_y, 1, 1)
Endfor
GraphicsWindow.DrawBoundText(10,400,200, "Koniec obliczeń")
'Program 2.Kartka
Sierpińskiego
'Utworzona z wykorzystaniem losowania punktów
na osiach
trans_x=400 'umiejscowienie
na ekranie
trans_y=300
scale=200 'skala
rysowania 100 dla a=0.69
x=0.1
y=0.1
a = 1
GraphicsWindow.Width=1000
GraphicsWindow.Height=800
For i = 1 To 100000
xlos = (math.GetRandomNumber(10001)-1)/10000 'losowanie
punktu na osi x
ylos
= (math.GetRandomNumber(10001)-1)/10000 'losowanie
punktu na osi y
x = x - (x - xlos) / a
y = y - (y - ylos) / a
x_screen=x*scale +trans_x
y_screen=y*scale +trans_y
GraphicsWindow.SetPixel(x_screen, y_screen, "blue")
GraphicsWindow.DrawEllipse(trans_x,trans_y, 1, 1)
Endfor
GraphicsWindow.DrawBoundText(10,400,200, "Koniec obliczeń")
Brak komentarzy:
Prześlij komentarz