// Mandelbrot set // Complex computation for X <= X**Y + C // X=XR+XI.i, Y=Y[0]+Y[1].i, C=CR+CI.i // 2008年12月15日 後 保範(東京工芸大学) // 早大2008年ゼミ生 大田さんのアイデア import java.awt.*; import javax.swing.*; import java.math.*; import java.io.*; public class Mondel3 extends JPanel{ public int xs=500, ys=500; public static double yr, yi; public Mondel3(){ setBackground(Color.white); //背景を白に setPreferredSize(new Dimension(xs, ys)); //xs-ysの画面 } protected void paintComponent(Graphics g){ //描画の指示 super.paintComponent(g); //背景を描く double X[] = new double[2]; double Y[] = new double[2]; double Z[] = new double[2]; double Scl=1.3, VL=1.0e100; //ズーム比率 double XP=0.0, YP=0.0; //ズームする中心座標 // double Scl=10.0; //ズーム比率 // double XP=-0.12, YP=0.76; //ズームする中心座標 double sR=0.5, sG=1.0, sB=0.7; //赤、緑、青の色合い double Xsl = 2.0/Scl; //画面座標-->計算座標 double Ysl = Xsl*ys/xs; // (x,y) --> (XR,XI) cmult PW = new cmult(); //複素関数の利用 Y[0] = yr; Y[1] = 0; VL = Math.exp(Math.log(VL)*2.0/yr); for (int y=0; y VL) break; //発散の処理 } double AR = Math.abs(XR); double AI = Math.abs(XI); int b=0, r=0, gr=0; //収束なら黒 if(AR > 1.0) { b = (int)(sB*Math.log(AR)) + 1; } //青はXR(実部)の対数 if(AI > 1.0) { r = (int)(sR*Math.log(AI)) + 1; } //赤はXI(虚部)の対数 if(XR < -1.0) { gr += b; b = b/2; } //緑は実部か虚部が負で発散 if(XI < -1.0) { gr += r; r = r/2; } gr = (int)(sG*gr); if(b > 255) b = 255; if(r > 255) r = 255; if(gr > 255) gr = 255; g.setColor(new Color(r,gr,b)); //色の設定 g.drawLine(x, y, x, y); //点を描く } } g.setColor(new Color(255,255,255)); //ズームした中心座標を白丸に g.fillOval((xs-4)/2,(ys-4)/2,4,4); } public static void main(String[] args) throws Exception{ InputStreamReader in = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(in); System.out.println("ベキ数を入力"); String s1 = br.readLine(); yr = Double.parseDouble(s1); JFrame frame = new JFrame("Draw Line"); //JFrame作成 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //x印クリックで 終了設定 Mondel3 h = new Mondel3(); //Mondel1のオブジェクトを生成 frame.add(h, BorderLayout.CENTER); //フレームにGraphを追加 frame.pack(); //フレームを指定の大きさにする frame.setVisible(true); //フレームに画面を見せる } }