Skocz do zawartości

Zbiór Mandelbrota


Rekomendowane odpowiedzi

Z nudów napisałem gm81 generujący graficzną reprezentację najpopularniejszego fraktalu - zbioru Mandelbrota. F2 odpowiada za ustalanie granic powiększania, lewy przycisk myszy powiększa fraktal w wybranym miejscu (domyślnie 4-krotnie).

 

https://gmclan.org/up506_14_fraktal.html

 

Oczywiście, jak łatwo zauważyć, GM nie nadaje się do tworzenia fraktali, lepiej podpiąć to pod lepszy silnik rysowania.

 

fraktal.png

 

Kod:

 

GML
var pRe,pIm;

 

for(xx=0; xx<room_width; xx+=1;) for(yy=0; yy<room_height; yy+=1;)

{

pRe=(xx/room_width)*abs(boundary_right-boundary_left)+boundary_left // wyznacz odcieta z plaszczyzny zespolonej z zasiegu (domyslnie -2;1)

pIm=(yy/room_height)*abs(boundary_bottom-boundary_top)+boundary_bottom // wyznacz rzedna z plaszczyzny zespolonej z zasiegu (domyslnie -1;1)

// zerowanie liczb zespolonych

Re=0;

Im=0;

nRe=0;

nIm=0;

 

for(i=0; i<iterations; i+=1;)

{

// przypisz startym wartosci nowo otrzymane

Re=nRe

Im=nIm

 

// f[a+bi] := a^2 + 2 abi - b^2 + pRe + pIm

nRe = Re*Re-Im*Im+pRe; // Re(f[a+bi]) := a^2 - b^2 + pRe

nIm = 2*Re*Im+pIm; // Im(f[a+bi]) := 2 abi + pIm

// dla uproszczenia obliczen pomijamy punkty uciekajace do nieskonczonosci)

if (nRe*nRe + nIm*nIm) > 4

break;

}

// wypelnij czarnym kolorem wnetrze

draw_set_color(make_color_hsv(4*i mod 256, 255, 255*(i<iterations)))

draw_point(xx,yy)

 

// nieistotne

if xx mod refresh_step = 0

screen_refresh();

}

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...