import java.awt.Graphics; public class c12_rossler extends java.applet.Applet { static final int left = 20; static final int w = 300; static final double a = 0.2; static final double b = 0.2; static final double c = 5.7; static final double dt = 0.04; static final double dt2 = dt/2; static final int hide = 5000; public void paint(Graphics g) { LineTo lt = new LineTo(g); double xmin = 1000; double xmax = -1000; double ymin = 1000; double ymax = -1000; double xn = 0; double yn = 1; double zn = 0; double xfac = 0; double yfac = 0; double fn[] = new double[3]; for (int i = 0; i < 50000; i++) { f(xn, yn, zn, fn); double xn0 = xn; double yn0 = yn; double zn0 = zn; double xfn0 = fn[0]; double yfn0 = fn[1]; double zfn0 = fn[2]; xn = xn0 + dt*xfn0; yn = yn0 + dt*yfn0; zn = zn0 + dt*zfn0; f(xn, yn, zn, fn); xn = xn0 + dt2*(fn[0] + xfn0); yn = yn0 + dt2*(fn[1] + yfn0); zn = zn0 + dt2*(fn[2] + zfn0); if (i < hide) { if (xn > xmax) xmax = xn; if (xn < xmin) xmin = xn; if (yn+zn > ymax) ymax = yn+zn; if (yn+zn < ymin) ymin = yn+zn; if (i == hide-1) { xfac = w/(xmax-xmin); yfac = w/(ymax-ymin); lt.drawLine((int)(left-xfac*(1+xmin)), (int)(left+w+yfac*ymin), (int)(left+xfac*(1-xmin)), (int)(left+w+yfac*ymin)); lt.drawLine((int)(left-xfac*xmin), (int)(left+w-yfac*(1-ymin)), (int)(left-xfac*xmin), (int)(left+w+yfac*(1+ymin))); lt.moveTo((int)(left+xfac*(xn-xmin)), (int)(left+w-yfac*(yn+zn-ymin))); } } else { lt.lineTo((int)(left+xfac*(xn-xmin)), (int)(left+w-yfac*(yn+zn-ymin))); } } } void f(double xn, double yn, double zn, double[] fn) { fn[0] = - yn - zn; fn[1] = xn + a*yn; fn[2] = b+xn*zn-c*zn; } }