Zbiór Mandelbrota- wersja 3D

Ten trówymiarowy pokaz traktuję, jako zwykłą "zabawę informatyczną". Można powiedzieć, że został wykonany bez specjalnego powodu i do poznania tej fascynującej figury niewiele wnosi.

Cały rusunek to wykres funkcji z=F(x,y)
ktorej dziedzina:

D={(x,y): x: <-2 , 1> i y: < -1.5, 1.5>}.

Wartości funkcji są proporcjonalne do ilości iteracji potrzebnych do ustalenia faktu :
"jestem punktem zbioru Mandelbrota".

Przygotuję gradient koloru, którym wyrażę jedną z dwu sytuacji :
1° punkt należy do zbioru Mandelbrota.
2° punkt nie należy do zbioru, ale jego chęć ucieczki    określa pewna liczba iteracji, po której znika..

Zdefiniuję również funkcję o wartościach integer, która po pierwsze ustali kolor jakim określimy "stan" rysowanego punktu dziedziny funkcji F(x,y), a po drugie posłuży do ustalenia wartości z=F(x,y).





void rysuj(Graphics g)
{
  pkt2d p=new pkt2d(0,0);
  pkt3d w=new pkt3d(0,0,0);
  int kolor;

  for(p.x=x_min;p.x<x_max;p.x+=dx)
    for(p.y=y_min;p.y<y_max;p.y+=dy)
     {
      kolor=JakiKolor(p);
      g.setColor(paleta[kolor]);
      w.war(p.x , p.y, 1.5* kolor/20.0);
      _3d.punkt(g,w);
    }
}
int JakiKolor(pkt2d a) 
{ 
  int il_it=90,i=0; 
  double x1,x,y,inf=2.5; 

  x=y=0; 
  while(x*x+y*y<inf&&i<il_it) 
  { 
    i++; 
    x1=x*x-y*y+a.x; 
    y=2*x*y+a.y; 
    x=x1; 
  } 
  if(i>=il_it)return(90); 
   else 
    return(i); 
} 
Color paleta[]; 
paleta= new Color [91];
void gradient()
{
 for(int i=0;i<91;i++)
  paleta[i]=new Color(165+i,165+i,125);
}
W przykładzie określiłem rysowaną funkcję następująco:
F(x,y)=0,075·kolor;. Aby uzyskać motyw animacyjny wystarczy poprawić na F(x,y)=a·0,075·kolor;,
gdzie a:<-1.5 ; 1.5>, dopracować szczegóły techniczne i gotowe !
Szybkość dzisiejszych komputerów (oraz coraz wydajniejsza maszyna wirtualna Javy), pozwala uzyskać niezły efekt, nawet wykonując obliczenia w czasie rzeczywistym.
Na potrzeby tego pokazu, poszczególne klatki animacji, oddzielane są nawet pauzami 0.2s !!

Moja impresja 3D nie jest oczywiście jedyna, np ciekawe podejście (i efekt) prezentowane jest przez Russell'a Walsmith'a, który nieco inaczej "uzyskuje" trzecią współrzędną. Na podanej stronie podany jest kod rozwiązania oraz przykłady uzyskanych grafik.

Prezentację 3D wykonałem stosując aksonometrię wg modelu opisanym w tym artykule na stronie informatycznej 28 LO