Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Monte Carlo trifft PI (https://www.delphipraxis.net/38621-monte-carlo-trifft-pi.html)

Delphi-Padawan 21. Jan 2005 22:10


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!

Nikolas 21. Jan 2005 22:13

Re: Monte Carlo trifft PI
 
Den Abstand zum Ursprung kannst du doch sehr einfach über den Satz des Pythagoras errechnen lassen...

CalganX 21. Jan 2005 22:14

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

Delphi-Padawan 21. Jan 2005 22:15

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!

CalganX 21. Jan 2005 22:18

Re: Monte Carlo trifft PI
 
Hi,
Satz des Pythagoras sollte man als Schüler schon wissen bzw. wissen, wo man ihn nachschlagen kann:
Code:
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).
Chris

yankee 21. Jan 2005 22:48

Re: Monte Carlo trifft PI
 
Ein anderer Thread mit Progrmm zum Problem
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....

axelf98 21. Jan 2005 23:24

Re: Monte Carlo trifft PI
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Delphi-Padawan
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.

Im Grunde hast du die Lösung schon selbst genannt... Man verwendet die Abstandsformel. Siehe Anhang!

Binärbaum 24. Jan 2005 10:57

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:
if (sqrt(x*x+y*y)<=r) then begin
  //Punkt im Kreis
  ...
end
else begin
  //Punkt außerhalb des Kreises
  ...
end;
testen, ob der Punkt im Kreis ist. dazu braucht man auch keinen Canvas o.ä. .

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:
if (sqrt(sqr(x-c)+sqr(x-d))<=r) then //Fortsetzung wie oben...
Dabei hat der Mittelpunkt des kreises die Koordinaten M(c;d).
[/Edit]

Jelly 24. Jan 2005 12:49

Re: Monte Carlo trifft PI
 
Zitat:

Zitat von Binärbaum
Delphi-Quellcode:
if (sqrt(x*x+y*y)<=r)

Statt über die Wurzel zu verfahren geht das hier auch, und hat den Vorteil, daß es wesentlich schneller läuft. Ist bei Monte Carlos immer zu berücksichtigen, da das Verfahren sehr oft durchgeprüft werden muss.
Delphi-Quellcode:
x*x+y*y<=r*r

Nicolai1234 24. Jan 2005 13:31

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 01:26 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz