Game-Apps für Smartphones und Tablets |
|
Bern University oh Teacher Education |
|
![]() |
|
// MonteCarlo.java package app.montecarlo; import ch.aplu.android.*; public class MonteCarlo extends GameGrid { private GGPanel p; private int n ; private int hits = 0; private GGStatusBar status; public MonteCarlo() { super(WHITE, windowZoom(400)); status = addStatusBar(30); } public void main() { p = getPanel(-.2, 1.2, -.2, 1.2); n = Integer.parseInt(GGInputDialog.show("Number of random points: " , "")); p.rectangle(0, 0, 1, 1, false); p.move(0,0); p.arc(1, 0, 90, false); status.setText("Berechnung der Zahl PI mit Monte Carlo Methode"); simulate(); double pi = 4 * (double)hits / n; status.setText(" Die Zahl PI ist " + pi); refresh(); } private void simulate() { double zx, zy; hits = 0; p.setAutoRefreshEnabled(false); for (int i = 0; i < n; i++) { zx = Math.random(); zy = Math.random(); if (zx * zx + zy * zy < 1) { hits = hits + 1; p.setPaintColor(RED); } else p.setPaintColor(GREEN); p.point(zx, zy); } } } |
n = Integer.parseInt(GGInputDialog.show ("Number of random points: " , "")); |
Der Inputdialog einget sich für eingabe von Werten während der Programmausführung. Die Eingabe muss in eine int-Zahl umgewandelt werden |
p.setAutoRefreshEnabled(false) | Ohne diese Zeile macht das Programm nach jedem neu erzeugten Punkt refresh() und zeichnet alle Punkte neu. Dadurch dauert die Programmausführung bei grösseren Zahlen sehr lange. setAutorefreshEmable(false) verhindert die Aktualisierung der ganzer Grafik nach jedem Punkt und die Programmausführung wird wesentlich schneller |