JavaScriptsMathematik

Pi schätzen mit dem Zufall

Bestimmt die Kreiszahl π, indem zufällige Punkte in ein Quadrat geworfen werden — mit sichtbarem Regen aus Treffern und Fehlwürfen.

Man kann π ausrechnen — oder man kann es auswürfeln. Dieses Script tut das Zweite: Es wirft zufällige Punkte in ein Quadrat, in dem ein Viertelkreis steckt, und zählt, wie viele davon im Kreis landen. Aus dem Verhältnis ergibt sich π.

Der Gedanke dahinter ist einfach. Ein Viertelkreis mit dem Radius 1 hat die Fläche π geteilt durch 4, das umschließende Quadrat die Fläche 1. Trifft man das Quadrat gleichmäßig zufällig, ist der Anteil der Punkte im Kreis also ungefähr π/4 — mal vier gerechnet ergibt das π. Die Punkte werden dabei nicht simuliert, sondern wirklich gezeichnet: Ihr seht dem Verfahren beim Arbeiten zu.

Solche Verfahren heißen Monte-Carlo-Methoden, nach dem Spielkasino. Entwickelt wurden sie in den vierziger Jahren am Los-Alamos-Labor, weil sich manche Probleme der Neutronenphysik nicht mehr durchrechnen ließen — wohl aber durch das massenhafte Nachspielen des Zufalls. Heute stecken sie in der Wettervorhersage, in Risikorechnungen von Versicherungen, in der Computergrafik und in jedem Programm, das Lichtstrahlen simuliert.

Beobachtet dabei, wie langsam die Genauigkeit wächst. Für eine zusätzliche richtige Stelle braucht es rund hundertmal so viele Punkte. Mit tausend Würfen liegt man meist bei 3,1, mit hunderttausend bei 3,14 — und für 3,14159 wären Milliarden nötig. Als Verfahren zur Berechnung von π ist Monte Carlo also hoffnungslos unterlegen; als Anschauung dafür, wie Zufall zu Wissen wird, ist es unschlagbar.

Verwandtes im Archiv: Monty-Hall-Simulator ist dasselbe Vorgehen für ein Wahrscheinlichkeitsproblem, Flächenberechnung Kreis zeigt den geraden Weg und Zufallszahlen berechnen die Grundlage.

Mathematik Baujahr 2026 läuft in deinem Browser
Script von kostenlose-javascripts.de

So funktioniert das Script

Das ganze Verfahren steckt in drei Zeilen. Der Rest des Scripts ist Zeichnen und Zählen.

const x = Math.random();
const y = Math.random();
const imKreis = x * x + y * y <= 1;

Math.random() liefert eine Zahl zwischen 0 und 1 — zwei davon ergeben einen zufälligen Punkt im Einheitsquadrat. Die dritte Zeile prüft, ob er im Viertelkreis liegt. Sie ist der Satz des Pythagoras: Der Abstand vom Ursprung ist die Wurzel aus x² + y², und er ist genau dann höchstens 1, wenn x² + y² höchstens 1 ist.

Die Wurzel wird also bewusst weggelassen. Das ist nicht nur schneller, sondern auch genauer — jede vermiedene Rechenoperation ist ein vermiedener Rundungsfehler. Dieser Kniff, Abstände über ihre Quadrate zu vergleichen, ist in der Spieleprogrammierung Standard.

const schaetzung = 4 * treffer / gesamt;

Der Anteil der Treffer entspricht dem Flächenverhältnis von Viertelkreis zu Quadrat, also π/4. Mit vier multipliziert steht π da. Bemerkenswert: Nirgends im Script kommt π selbst vor — außer beim Vergleich mit dem wahren Wert. Die Zahl entsteht wirklich aus dem Zufall.

stift.fillRect(x * seite, seite - y * seite, 2, 2);

Beim Zeichnen fällt der Ausdruck seite - y * seite auf. Der Grund: In der Zeichenfläche zeigt die y-Achse nach unten, in der Mathematik nach oben. Ohne diese Umkehrung stünde der Viertelkreis auf dem Kopf. Das ist beim Zeichnen von Diagrammen die häufigste Verwechslung überhaupt.

stift.arc(0, seite, seite, -Math.PI / 2, 0);

Der Bogen wird um die linke untere Ecke gezogen, mit dem Radius der ganzen Seitenlänge. Die Winkelangaben sind im Bogenmaß: -Math.PI / 2 ist −90 Grad, also senkrecht nach oben, und 0 ist waagerecht nach rechts. Zur Umrechnung solcher Winkel gibt es nebenan den Winkel-Umrechner.

uhr = setInterval(function () {
  werfen(tempo);
  …
}, 40);

Geworfen wird in Schüben: alle 40 Millisekunden ein Paket von 20 bis 2000 Punkten. Einzelne Punkte mit je einem Wecker zu werfen wäre viel zu langsam — der Aufwand steckt nicht im Rechnen, sondern im Aufruf. Diese Bündelung ist bei jeder Animation mit vielen Objekten der entscheidende Kunstgriff.

Zur Genauigkeit noch eine Beobachtung, die man beim Zuschauen macht: Der Fehler sinkt mit der Wurzel aus der Anzahl der Würfe. Viermal so viele Punkte halbieren ihn, hundertmal so viele zehnteln ihn. Das gilt für alle Monte-Carlo-Verfahren und ist ihr grundsätzlicher Nachteil gegenüber gezielten Rechenverfahren.

Zum Anpassen: Dasselbe Verfahren bestimmt die Fläche jeder Figur, die sich durch eine Ja-Nein-Bedingung beschreiben lässt — tauscht die Kreisbedingung gegen eine andere aus, und ihr messt deren Fläche. Genau darin liegt die Stärke der Methode: Sie braucht keine Formel für die Fläche, sondern nur einen Test, ob ein Punkt drin liegt.

Script für die eigene Homepage

Kopiert euch den kompletten Code und fügt ihn an der Stelle eurer Seite ein, an der das Script erscheinen soll. Er läuft ohne weitere Dateien und ohne fremde Server.

Mehr aus der Kategorie Mathematik