![]() |
Monte Carlo trifft PI
Hallo zusammen,
wir behandeln in der Schule zur Zeit die Monte Carlo-Methode. Dazu möchte ich ein Programm schreiben: Folgendes habe ich schon: Zunächst wird ein Quadrat gezeichnet, darin ein Kreis mit maximaler Größe. Dieses Gebilde wird in vier Teile geteilt. Rechts oben in das Viertel werden n-Punkte gezeichnet. was ich noch brauche: Nun soll mir der PC ausgeben, wie viele der Punkte auf dem Kreis gelandet sind und wie viele auf dem Rest des Quadrates! Ich habe mir das so überlegt: wenn ich den Abstand der Punkte zum Mittelpunkt des Kreises errechnen könnte, wäre das meine Lösung, denn Wenn Länge von Mittelpunkt zu Punkt < Radius dann ist der Punkt auf dem Kreis. Ich zeichne mit Canvas.Ellipse, Canvas.Rectangle und Canvas.Pixels Ich habe sie auch schon verbinden gelassen, kann aber nicht abfragen, wie lange diese Strecken jeweils sind! Ich brauche das dringend! Bitte helft mir! |
Re: Monte Carlo trifft PI
Den Abstand zum Ursprung kannst du doch sehr einfach über den Satz des Pythagoras errechnen lassen...
|
Re: Monte Carlo trifft PI
Hi,
lässt es sich nicht mathematisch ausrechnen, ob ein Punkt innerhalb einer bestimmten Fläche liegt? :gruebel: Ich weiß, dass ich das mal gemacht habe und das geht, aber leider weiß nicht mehr wie. Jedenfalls wäre das wesentlich effektiver, als über Canvas irgendwas zu lösen. Chris |
Re: Monte Carlo trifft PI
Hi Toxman,
das klingt gut, ich erinnere mich an etwas... Aber wie ging das noch? Kannst du mir das sagen? BITTE! |
Re: Monte Carlo trifft PI
Hi,
Satz des Pythagoras sollte man als Schüler schon wissen bzw. wissen, wo man ihn ![]()
Code:
Chris
a² + b² = c²
Wobei a und b die Katheten des rechtwinkligen Dreiecks ABC sind und c die Hypothenuse ist (die dem rechten Winkel gegenüberliegende Seite). |
Re: Monte Carlo trifft PI
![]() Ich musste für den Entwickler den Tester spielen. Das Programm ist leider nicht OpenSource, aber du kanst dir ansehen, wie er es gelöst hat und dich gegebenenfalls mit dem Autor in Verbindung setzen. Er muss es ja wissen.... |
Re: Monte Carlo trifft PI
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
Re: Monte Carlo trifft PI
Also wenn der Kreis den Radius r hat, und der Punkt die Koordinaten P(x,y), dann kann man mit
Delphi-Quellcode:
testen, ob der Punkt im Kreis ist. dazu braucht man auch keinen Canvas o.ä. .
if (sqrt(x*x+y*y)<=r) then begin
//Punkt im Kreis ... end else begin //Punkt außerhalb des Kreises ... end; MfG Binärbaum [Edit] Dabei wird davon ausgegangen, dass der Kreis den Mittelpunkt M(0;0) hat. Ansonsten müsste man die if Abfrage ändern:
Delphi-Quellcode:
Dabei hat der Mittelpunkt des kreises die Koordinaten M(c;d).
if (sqrt(sqr(x-c)+sqr(x-d))<=r) then //Fortsetzung wie oben...
[/Edit] |
Re: Monte Carlo trifft PI
Zitat:
Delphi-Quellcode:
x*x+y*y<=r*r
|
Re: Monte Carlo trifft PI
Ich habe mal eine Frage zum Verständnis. Das ganze mit Canvas zu machen bringt doch rein garnichts oder?
Wenn ich so ein Viertelkreis habe, dann könnte ich doch auch gleich die Pixel auszählen, um zu gucken, wie groß Pi unefähr ist, oder? Das wäre zwar nicht sehr genau, aber es käme auf dauer doch das gleiche raus wie bei der Monte Carlo Methode. Sehe ich da was falsch? Beispiel: Das obige Bild hat 71x71 Pixel. Das sind dann insgesamt 5041 Pixel. Davon liegen 1605 Pixel außerhalb des Kreises und 3436 Pixel innerhalb. Dann käme ich auf ein Pi von ungefähr 3,1408. Das Ergebnis wird doch fast genauso bleiben, wenn ich da jetzt ein paar Punkte zufällig raufmale, oder? Das heißt (denk ich mal) dass man eine so große Fläche bräuchte, die mit einem Canvas nicht mehr zu bewältigen ist. Aber auch sp ist doch der Effekt mit den Pixelzählen immer schneller ung genauer als ein paar zufällige Punkte... Naja, vielleicht kann mich ja einer eines Besseren belehren... Gruß Nicolai |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz