Zbiór Julii

Z wikipedii :
Zbiór Julii - fraktal, będący podzbiorem zespolonej płaszczyzny dwuwymiarowej.
Mianem tym określa się każdy zbiór z pewnej rodziny zbiorów. Zbiór tworzą te punkty p dla których ciąg opisany równaniem rekurencyjnym:
(*)z0=p , zn+1=(zn)2+c nie dąży do nieskończoności (można wykazać, że to oznacza: |zn|<2 ).

Myszą powiększysz 2-krotnie aktualny zbiór
- kliknięcie myszy wyznacza nowy punkt centralny
Pierwszym matematykiem, który badał takie zbiory był Gaston Julia .
Na jego cześć nazywamy je zbiorami Julii .

Wzór (*), oczywiście zinterpretujemy na płaszczyźnie R2, bo na takiej przyjdzie nam rysować. Jeśli zauważymy, że :
z2=(x+y·i)2=x2+2·x·y·i-y2=(x2-y2)+(2·x·y)·i
wzór(*) zinterpretujemy tak :

dla punktu p=(p.x,p.y) wielokrotnie będziemy stosowali przekstałcenie:
P(p)=(p.x2-p.y2+c.x , 2·p.x·p.y+c.y)

ustalimy kolor dla punktów, które
po n-krotnym stosowaniu przekształcenia P, pozostają nadal wewnątrz okręgu O[(0,0),2]

Dokładniej, kolor ustalimy w zależności od ilości iteracji dla których punkt pozostaje w tym obszarze czyli wyrazimy kolorem jego "chęć" pozostania we wnętrzu koła. Jeśli np max ilość iteracji n=50, wystarcza w tablicy zgromadzić informację o wybranym gradiencie długości 50.

Funkcja JakiKolor1 wymaga b. starannie dobranej palety. Obok wersja JakiKolor zastosowana u nas:




Color JakiKolor1(pkt2d p) 
{
  int il_it=50, i=0; 
  float r,g,b; 
  double x1,x,y,inf=2.0; 

  x=p.x; y=p.y; 
  while(x*x+y*y<inf && i<il_it) 
  {
    i++; 
    x1=x*x-y*y+c.x; 
    y=2*x*y+c.y; 
    x=x1;
  } 
  return(paleta[i]);
}
Color JakiKolor(pkt2d p) 
{
  int il_it=50, i=0; 
  float r,g,b; 
  double x1,x,y,inf=2.0; 

  x=p.x; y=p.y; 
  while(x*x+y*y<inf && i<il_it) 
  {
    i++; 
    x1=x*x-y*y+c.x; 
    y=2*x*y+c.y; 
    x=x1;
  } 
  r=(float)Math.sin(Math.PI*i/il_it);
     if( r < 0) r = 0; 
  g=(float)Math.sin(1.5*Math.PI*i/il_it);
     if( g < 0) g = 0; 
  b=(float)Math.sin(2.*Math.PI*i/il_it);
     if( b < 0) b = 0; 
  return(new Color(r,g,b));
}

Przydały się tu bardzo doświadczenia zdobyte przy pracy nad tematem:
"dywan trygonometryczny"

Zwróć uwagę na zakres w jakim rysujemy dywan.
W następnym rozdziale omówimy dokładniej technikę skalowania.

Kolor i skalowanie to ważne umiejętności, potrzebne, by w pełni pokazać piękno tych zbiorów.