/*********************************/ /* */ /*   翼のカオスを描く */ /* */ /* 1997/ 5/20 宍戸 輝光 */ /* */ /*********************************/ import java.awt.*; public class tubasa extends java.applet.Applet implements Runnable { Image screen; Graphics g_screen; Panel ap,bp,btp; Button ctrb; TextField at,bt; Label rangel,al,bl; Thread runner=null; int i,j; double a,b,x,y,xn,yn; boolean doing; public void start(){ resize(460,360); setBackground(Color.lightGray); setFont(new Font("TimesRoman",Font.PLAIN,12)); screen=createImage(302,302); /* 表示用イメージ */ g_screen=screen.getGraphics(); g_screen.setColor(Color.black); g_screen.fillRect(1,1,300,300); g_screen.setColor(Color.white); g_screen.drawRect(0,0,301,301); ctrb=new Button("G o"); rangel=new Label("Range"); al=new Label("a="); bl=new Label("b="); at=new TextField(8); at.setBackground(Color.white); bt=new TextField(8); bt.setBackground(Color.white); this.setLayout((LayoutManager)null); ap=new Panel(); add(ap); ap.reshape(316,32,120,32); ap.setLayout(new FlowLayout(FlowLayout.LEFT,4,4)); bp=new Panel(); add(bp); bp.reshape(316,80,120,32); bp.setLayout(new FlowLayout(FlowLayout.LEFT,4,4)); btp=new Panel(); add(btp); btp.reshape(64,316,240,32); ap.add(al); ap.add(at); bp.add(bl); bp.add(bt); btp.add(ctrb); doing=false; a=-0.8; b=0.008; at.setText(String.valueOf(a)); bt.setText(String.valueOf(b)); if (runner==null) { runner=new Thread(this); /*スレッド生成*/ runner.start(); } } public void stop() { /*終了時にスレッド破棄*/ if (runner!=null) { runner.stop(); runner=null; } } public void run() { while (true) { if (doing) /* 描画中 */ draw_screen(); }; } public void draw_screen() { /* グラフ描画 */ Color co; g_screen.setColor(Color.black); g_screen.fillRect(0,0,300,300); repaint(); x=0.1; y=0; for (i=0;i<1024;i++) { for (j=0;j<256;j++) { xn=y+b*(1.0-0.05*y*y)*y+a*x+(2.0*(1.0-a)*x*x)/(1.0+x*x); yn=-x+a*xn+(2.0*(1.0-a)*xn*xn)/(1.0+xn*xn); x=xn; y=yn; co=new Color(255,(i % 256),j); g_screen.setColor(co); g_screen.fillRect((int)(xn*7+150),300-(int)(yn*7+150),1,1); } repaint(); if (!doing) { ctrb.setLabel("G o"); return; } } ctrb.setLabel("G o"); doing=false; } public boolean action(Event evt,Object what) { if (evt.target==ctrb) { /* 開始・中断 */ if (doing) { /* 中断 */ ctrb.setLabel("G o"); doing=false; return true; } try { /* aの設定 */ a=Double.valueOf(at.getText()).doubleValue(); } catch (Exception e) { a=-1.0; at.setText(String.valueOf(a)); } try { /* bの設定 */ b=Double.valueOf(bt.getText()).doubleValue(); } catch (Exception e) { b=0.1; bt.setText(String.valueOf(b)); } ctrb.setLabel("Stop"); doing=true; return true; } return false; } public void paint(Graphics g){ g.drawImage(screen,7,7,this); } public void update(Graphics g){ paint(g); } }