Ich habe vor, PI per Monte-Carlo-Methode zu berechnen. Aber leider weiß ich nicht genau, wie ich abrfagen soll, ob der Punkt im Kreis oder außerhalb liegt.
Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge
Viel Spaß beim portieren nach C++!!
//-------------------------------------------------------------------
iseed = 42
10 RANDOMIZE TIMER
quadrat = 0
kreis = 0
CLS
SCREEN 0
INPUT "Anzahl der Punkte : ", n
CLS
SCREEN 12
WINDOW SCREEN (0, 0)-(2!, 2! / 1.33333333#)
LINE (0, 0)-(1, 0)
LINE (1, 0)-(1, 1)
LINE (1, 1)-(0, 1)
LINE (0, 1)-(0, 0)
CIRCLE (.5, .5), .5
FOR i = 1 TO n
LOCATE 10, 60
PRINT "Punkt Nr. "; i
x = RND(iseed)
y = RND(iseed)
REM *
REM * Mit dem Satz von Pythagoras wird ueberprueft ob sich der
REM * Punkt (x,y) innerhalb des Kreises liegt oder nicht:
REM * Der Ursprung des Koordinatensystems liegt im Mittelpunkt
REM * des Kreises mit den Koordinaten (0.5,0.5). Der Radius
REM * des Kreises ist 0.5 .
REM *
IF SQR((x - .5) ^ 2 + (y - .5) ^ 2) kreis = kreis + 1
PSET (x, y), 3
ELSE
PSET (x, y), 2
END IF
LOCATE 12, 60
pi = 4 * kreis / i
PRINT "pi = "; pi; " "
NEXT i
quadrat = n
LOCATE 22, 1
PRINT " kreis = ", kreis
PRINT "quadrat = ", quadrat
ratio = kreis / quadrat
pi = 4! * ratio
PRINT "Kreisflaeche/Quadratflaeche = ", ratio
PRINT " * 4 = pi = ", pi
PRINT " exakter Wert fuer pi = 3.1415..."
INPUT dummy
IF dummy = 1 GOTO 20
GOTO 10
20 SCREEN 0
END
//-------------------------------------------------------------------
Aha.
ist das Batch?
(wegen rem & cls)
Monte Carlo Methode?
Du meinst zufällige Punkte (Regentropfen) in ein Einheitsquadrate 'tropfen' lassen und aus dem verhältinis der Treffer/ Gesamt PI folgern?
Kurzantwort:
Über die Entfernung zum Kreismittelpunkt!
Langantwort:
Ok du hast ein Quadrat mit Seitenlänge 1 in dessen eine Ecke der Mittelpunkt eines Kreises mit Radius 1 ist. Eine Quadratseite nennst du X die andere Y. Den Kreis legst du in (X;Y) = (0,0) an.
Ob ein Punkt (X;Y) = ([0,1];[0,1]) im Kreis liegt kannst du über die Entfernung des Punkts zum Mittelpunkt des Kreises (0;0) feststellen.
Die Entfernung r eines Punktes (x;y) vom Kreismittelpunkt ist
sqrt(x*x + y*y);
Für r Für r = 1 liegt der Punkt auf der Kreislinie *
Für r > 1 liegt der Punkt ausserhalb des Kreises
Meines Wissens werden die mit * gekennzeichneten Fälle zusammengefasst zu den Erfolgsfällen.
Ein Kreis mit Radius 1 hat die Fläche PI. Da du hier aber nur auf ein Kreisviertel getropft hast ist auch die Erfolgsfläche PI/4.
Das Verhältnis der Erfolgsfälle zu den Gesamttropfen ist dasselbe wie das Verhältnis der Erfolgsfläche zum Quadrat:
Erfolg PI
-------- = ------
Gesamt 4* 1
4* Erfolg
PI = -------------
Gesamt
Meld' dich einfach wenn ich das ganze noch in C++ Code verpacken soll
CU
Dreamforger
Naja, es ist eigentlich nur
> sqrt(x*x + y*y);
was gibt das denn zurück, wenn der Punkt außerhalb/im Kreis ist?
Und zum Rest:
erfolg/gesamtanz. = 4*PI