/** * @author hemmi */ import java.awt.Frame; import java.awt.Graphics; import java.awt.Color; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class Mandelbrot_2 extends Frame{ public static void main(String[] args) { int imgWidth,imgHeight; imgWidth = 512; imgHeight = 512; AppFrame f = new AppFrame(); f.setTitle("Mandelbrot2"); f.setSize(imgWidth,imgHeight); f.addWindowListener ( new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); f.show(); } //end of main() } //end of public class Mandelbrot_2 class AppFrame extends Frame{ public void paint(Graphics g){ int x,xx,y,yy,k; int imgWidth,imgHeight; int N,BN; double RB,RE,IB,IE; double ar,ai,dr,di,zr,zi,z2r,z2i; long t; Color[] C={Color.red, Color.orange, Color.pink , Color.magenta , Color.blue , Color.cyan , Color.green , Color.yellow, Color.lightGray, Color.gray }; imgWidth = 512; imgHeight = 512; N=30; //複素平面内の,1点での計算を繰り返す回数 BN=450; //複素平面の分割数 RB=-2; //複素平面の実部(x軸)の始点 RE=0.5; //複素平面の実部(x軸)の終点 IB=-1.2; //複素平面の虚部(y軸)の始点 IE=1.2; //複素平面の虚部(y軸)の終点 ar=-1.2; //複素定数の実部 ai=-0.1; //複素定数の虚部 dr = (RE-RB) / BN; //実部の増分 di = (IE-IB) / BN; //虚部の増分 g.setColor(Color.BLACK); g.fillRect(0,0,imgWidth,imgHeight); for (xx=0 ; xx<=BN ; ++xx){ //実軸(x軸)のループ for (yy=0 ; yy<=BN; ++yy){ //虚軸(y軸)のループ ar = RB + xx*dr; //複素定数の値を,計算する複素平面上のX座標(実部の値)とする ai = IE - yy*di; //複素定数の値を,計算する複素平面上のy座標(虚部の値)とする zr = 0.0; //複素平面上の実部の値を0から計算し始める zi = 0.0; //複素平面上の虚部の値を0から計算し始める for (k=0 ; k<=N ; ++k){ z2r = zr*zr - zi*zi + ar; //zの2乗の実部 z2i = 2.0*zr*zi + ai; //zの2乗の虚部 if ((z2r*z2r + z2i*z2i) > 4.0) { g.setColor(C[k % 10]); g.drawLine(xx+30,yy+50,xx+30,yy+50); break; } //end of if zr=z2r; zi=z2i; } //end of k } //end of yy } //end of xx } //end of paint } //end of class AppFrame