/* S0530.java * モンテカルロ法による球の体積計算 * (C) H.Ishikawa 2008 */ package simulation; import java.applet.*; import java.awt.*; import java.awt.event.*; import window.Window; public class S0530 extends Applet implements ActionListener { Button button0; public void init() { button0 = new Button(" 再実行 "); add(button0); button0.addActionListener(this); } public void actionPerformed(ActionEvent e) { String label = e.getActionCommand(); repaint(); } public void paint(Graphics g){ Window w ; w = new Window(); int SPACE = 20; int HIGHT = 400; int WIDTH = 640; int NUMBER = 1000; /* 乱数の組の数 */ int j; /* forのカウンタ */ int n1 = 0; /* 球の中に入った数 */ double x0, y0, z0; /* 点の座標 */ double v = 0.0; /* 体積の近似値 */ w.setWindow(0, 0, 0, NUMBER, 8, SPACE, HIGHT-SPACE, WIDTH-SPACE, SPACE); w.axis(0, "j", NUMBER / 10, "v", 1, g); g.setColor(Color.green); w.moveTo(0, 0.0, 0.0, g); for (j = 1; j <= NUMBER; j ++) { x0 = Math.random(); y0 = Math.random(); z0 = Math.random(); if (x0 * x0 + y0 * y0 + z0 * z0 < 1.0) { /* 球の中に入った場合 */ n1 = n1 + 1; } v = (double)n1 / j * 8; w.lineTo(0, j, v, g); } g.setColor(Color.black); g.drawString(" v = " + v, 10, 10); stop(); } }