Rekurencja

w opracowaniu klasy E '91

Atraktor Clifforda

Łukasz Nawrot

Rezultat

Przedstawiony applet obrazuje atraktor Clifforda.

Zadanie

Zadaniem jest narysowanie atraktora Clifforda.

Dane

Dane mamy stałe a, b, c, d oraz wzór wyznaczający współrzędne poszczególnych punktów, z których składa się atraktor. Stałe są wyznacznikami wyglądu atraktora.

Wzory

Najważniejszym wzorem, który wykorzystamy do stworzenia atraktora, jest ten definiujący figurę. Za pomocą niego możemy wyznaczyć współrzędne punktu P(x, y), przy znanych a, b, c, d. Wzór na współrzędną x: Rysunek - wzór 1 oraz na współrzędną y: Rysunek - wzór 2

Kod

Atraktor przedstawiamy wykorzystując kontekst, a więc także bibliotekę Runnable. Poniżej przedstawiam procedurę rysującą atraktor:

void rysuj(Graphics g)
{
  double pom_x;
  double pom_y;
		
  g.setColor(Color.black);
  lo28.punkt(g, p);
  for(int i = 0; i < 25000; i++)
  {
    pom_x = p.x;
    pom_y = p.y;
    p.x = Math.sin(a*pom_y) + c*Math.cos(a*pom_x);
    p.y = Math.sin(b*pom_y) + d*Math.cos(b*pom_y);
			
    pkt2d np = new pkt2d(p.x, p.y);
    lo28.punkt(g, np);
  }
}

Procedura głowna ma postać:

public void paint(Graphics g)
{
  rysuj(kontekst);
  g.drawImage(strona, 0, 0, this);
}