import java.applet.Applet; import java.awt.*; import java.awt.event.*; // 2009.3 by K.Shindo public class buffon extends Applet implements ActionListener { Image offs; Graphics grf; int W = 450; int H = 360; double pi=3.1415926535897932; double pb=1.0/pi; double s; int N; int Nsum; int T; int Tsum; Button btn1; Button btn2; boolean flg; public void init(){ offs = createImage(W,H); grf = offs.getGraphics(); setLayout(null); btn1 = new Button("Trial"); btn1.setBounds(300, 45, 50, 25); btn1.addActionListener(this); add(btn1); btn2 = new Button("Clear"); btn2.setBounds(360, 45, 50, 25); btn2.addActionListener(this); add(btn2); flg = false; N = 0; Nsum = 0; T = 0; Tsum = 0; } public void update(Graphics g) { paint(g);} public void paint(Graphics g) { grf.setColor(new Color(180,200,180)); grf.fillRect(0, 0, W, H); grf.setColor(Color.black); for(int d = 1; d <= 6; d++) grf.drawLine(20,40+d*40, 260,40+d*40); if(flg){ N = 200; Nsum = Nsum + N; T = 0; for(int i = 1; i <= N; i++){ double px = 40.0+5.0*40.0 * Math.random(); double py =80.0+5.0*40.0 * Math.random(); double s = 2.0 * pi * Math.random(); double qx = px + 20.0*Math.cos(s); double qy = py + 20.0*Math.sin(s); int A=(int)(py/40.0); int B=(int)(qy/40.0); if(Math.abs(A-B)==1) { T = T + 1; grf.setColor(Color.red); } else { grf.setColor(Color.blue); } grf.drawLine((int)px,(int)py,(int)qx,(int)qy); } Tsum = Tsum + T; double d1 = (double)T/(double)N; double d2 = (double)Tsum/(double)Nsum; String d1S=Double.toString(d1); String d2S=Double.toString(d2); d1S=(d1S+"00000000").substring(0,8); d2S=(d2S+"00000000").substring(0,8); grf.setColor(Color.black); grf.drawString("j‚ͺόŠΤ‚Μ”Ό•ͺ‚̏ꍇ yBuffon's Needle‚ζ‚θz" , 70, 30); grf.setColor(Color.red); grf.drawString("Τ‚͐ό‚ɐG‚κ‚½j" , 20, 60); String pbS=Double.toString(pb); pbS=pbS.substring(0,8); grf.setColor(Color.black); grf.drawString("i ˜_—’l j" ,285,95); grf.drawString("‚P / ƒΞ @"+pbS , 285,110); grf.drawString("i200–{ ŽŽsj@" , 285, 135); grf.drawString("N = " + N, 295, 150); grf.drawString("n = " + T, 295, 165); grf.drawString("‚Ž @/@ ‚m @= " + d1S, 295, 180); grf.drawString("iŽŽs—έŒvj@", 285, 215); grf.drawString("N = " + Nsum,295, 230); grf.drawString("n = " + Tsum, 295, 245); grf.drawString("‚ށ@ / @‚m@ = " + d2S, 295, 260); grf.setColor(new Color(180,50,50)); double d=100.0*Math.abs((pb-d2)/pb); String dS=Double.toString(d); dS=(dS+"0000000").substring(0,8); grf.drawString("Œλ· " + dS+" %", 295, 280); grf.setColor(Color.black); grf.drawString("program by K.Shindo" , 295, 300); } g.drawImage(offs, 0, 0, this); } public void actionPerformed(ActionEvent actionevent) { if(actionevent.getActionCommand() == "Clear") { flg = false; N = 0; Nsum = 0; T = 0; Tsum = 0; } else { flg = true; } repaint(); } }