Atraktor Clifforda
Rezultat
Przedstawiony applet obrazuje atraktor Clifforda.
Atrakot Clifforda jest określony wzorem:
xn+1=sin(a·yn)+c·cos(a·xn)
yn+1=sin(b·xn)+d·cos(b·yn)
Aplet pozwala na obejrzenie atraktora przy zmieniających się wartościach a, b, c, d. Zmiana tych wartości jest połączona z myszką co pozwala uzyskać bardzo ciekawy efekt i obejrzeć atrakotr w wielu różnych wariacjach.
Kliknieciem zmienia sie wartość c, d. Przeciągnięciem zmienia się warość a, b.Ich wartość jest przedstawiona w górnej częsci apletu. W prawym gornym rogu jest guzik wyłączający animacje.
pkt2d w=new pkt2d(0,0); pkt2d k=new pkt2d(0,0); pkt2d z=new pkt2d(0,0); pkt2d P(pkt2d p) { double pom1; double pom2; pom1=p.x; pom2=p.y; p.x=Math.sin(a*pom2)+c*Math.cos(a*pom1); p.y=Math.sin(b*pom1)+d*Math.cos(b*pom2); return(p); } void rysuj(Graphics g) { lo28.punkt(g,k); for(int i=0;i<n;i++) { w=P(w); k.war(1.5*w.x,1.5*w.y); lo28.punkt(g,k); } }
Jest to procedura rysująca atraktor, łatwo zauważyć, że pkt2d P() jest interpretacją wzoru podanego powyżej. rysuj() obrazuje wzór w układzie prostokątnym.
Punkt K jest odwzorowaniem punktu W w skali=1.5. Dzięki czemu rysunek jest wyraźniejszy.
public boolean handleEvent(Event zd) { if(zd.id==Event.MOUSE_DOWN) { z=lo28.r2(zd.x,zd.y); c=z.x; d=z.y; repaint( ); } if(zd.id==Event.MOUSE_DRAG) { z=lo28.r2(zd.x,zd.y); a=z.x; b=z.y; repaint( ); } return true; }
Punkt Z bedący miejscem kliknięcia lub przeciągnięcia myszy nadaje swoim wartościom odciętych i rzędnych wartości a, b, c lub d.