/* A0610.java 6章1.解答 * 2次元ランダムウォーク (歩幅がランダムに変わる場合) * (C) H.Ishikawa 2008 */ package simulation; import java.applet.*; import java.awt.*; import java.awt.event.*; import window.Window; public class A0610 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 = 30; int HIGHT = 400; int WIDTH = 640; double X_MAX = 80.0; double Y_MAX = 50.0; double x,y; /* 粒子の座標 */ double th; /* θ */ double l; /* 歩幅 */ int t; /*時刻*/ long T_END = 10000; /* 終りの時刻 */ /*グラフィックの準備*/ w.setWindow(0, -X_MAX, -Y_MAX, X_MAX, Y_MAX, SPACE,HIGHT-SPACE,WIDTH-SPACE,SPACE); w.axis(0, "", 10,"", 10, g); w.moveTo(0, 0, 0, g); /*メイン*/ x = 0.0; y = 0.0; for (t = 1; t <= T_END; t ++) { th = 2.0 * Math.PI * Math.random(); l = -1.0 * Math.log(1 - Math.random()); /* 平均1.0の指数乱数 */ x = x + l * Math.cos(th); y = y + l * Math.sin(th); g.setColor(Color.green); w.lineTo(0, x, y, g); } stop(); } }