Rekurencja

w opracowaniu klasy E '91

Atraktor Polynomial A 3D

Grzegorz Kosicki

Rezultat

Checkboxem możemy pauzować proces rysowania lub go znów przywołać. Przy pomocy suwaków możemy zmieniać wartości zmiennych a,b,c, które występują we wzorze. Po ich zmianie natychmiast będzie widoczna zmiana wykresu atraktora.

Poczatkowa konfiguracja to: a=1.58, b=1.12, c=0.28.

Wyrażony jest takim układem równań:

Punktem początkowym u mnie jest punkt W(0,0,0). Atraktor powstaje poprzez wielokrotne narysowanie punktu:
W(a+y-z*y,b+z-x*z,c+x-y*x)

Kod procedury rysującej atraktor Polynomial typ A, w najprostszej postaci:

pkt3d P(pkt3d p) 
{
  double xp,yp,zp;
  
  xp=p.x; 
  yp=p.y; 
  zp=p.z;
  
  p.x= a + yp - zp*yp; 
  p.y= b + zp - xp*zp; 
  p.z= c + xp - yp*xp; 
  
  return(p);
}

void rysuj(Graphics g) 
{
  pkt3d w=new pkt3d(0,0,0); 
  
  for(int i=0;i<20;i++) 
  {
    w=P(w); 
    _3d.punkt(g,w);
  }
} 

Na początku, gdy rysujemy ten atraktor jest mało on widoczny. W celu przybliżenia go zastosowałem proste rozwiązanie, które przedstawiłem w kodzie poniżej:

void rysuj(Graphics g) 
{
  pkt3d w=new pkt3d(0,0,0); 
  pkt3d k=new pkt3d(0,0,0); 
  for(int i=0;i<20;i++) 
  {
    w=P(w); 
    k.war(4*w.x,4*w.y,4*w.z); 
    _3d.punkt(g,k);
  }
}