Atraktor Pickover 3D
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 oraz d, które występują we wzorze. Po ich zmianie natychmiast będzie widoczna zmiana wykresu atraktora.
Poczatkowa konfiguracja to: a=1.0, b=1.8, c=0.7, d=1.5.
Wyrażony jest takim układem równań:
- xn+1=sin(a*yn)-zn*cos(b*xn)
- yn+1=zn*sin(c*xn)–cos(d*yn)
- zn+1=sin(xn)
Punktem początkowym u mnie jest punkt W(-10,-10,-10). Atraktor powstaje poprzez wielokrotne narysowanie punktu:
W(sin(a*y)-z*cos(b*x),z*sin(c*x)-cos(d*y),sin(x))
Kod procedury rysującej atraktor Pickover, w najprostszej postaci:
pkt3d P(pkt3d p) { double xp,yp,zp; xp=p.x; yp=p.y; zp=p.z; p.x= Math.sin(a*yp) - zp*Math.cos(b*xp); p.y= zp*Math.sin(c*xp) - Math.cos(d*yp); p.z= Math.sin(xp); return(p); } void rysuj(Graphics g) { pkt3d w=new pkt3d(-10,-10,-10); for(int i=0;i<20;i++) { w=P(w); _3d.punkt(g,w); } }
Na początku, gdy rysujemy ten atraktor jest mało 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(-10,-10,-10); pkt3d k=new pkt3d(0,0,0); for(int i=0;i<20;i++) { w=P(w); k.war(6*w.x,6*w.y,6*w.z); _3d.punkt(g,k); } }