Zitat von
Nicolai1605:
Zitat von
Jelly:
Zitat von
Nicolai1605:
Aber wenn die Punkte gegen unendlich laufen
Hast du denn auch unendlich Speicher um dein Schachbrett im Speicher zu halten ?
?
Erlär doch mal, warum meine Annahme falsch ist. Wenn ich das oben genannte Beispiel durchrechnen lasse, dann komme ich wirklich nur auf den Wert, der auch bei den Pixeln rauskommt. egal wie viele Millionen mal ich da Punkte raufmache...
WO liegt denn da mein Denkfehler?
Ich glaube, deine Lösung ist auch richtig.
Dein Denkfehler (und gleichzeitig der Vorteil der Monte-Carlo-Methode) besteht darin, das bei deiner Pixelbasierenden Lösung das Canvas seeehr groß sein müsste, um ein brauchbares ergebnis zu liefern, da ein Pixel ja bekanntlich entweder schwarz oder weiß ist, aber nicht halb schwarz, halb weiß oder so.
Bei der Monte-Carlo-Methode hingegen kann man Dezimalzahlen einsetzen, die die Ergebnisse des Zufallszahlengenerators sind.
/E: Herrlich, bin ich wieder zu langsam gewesen, und ich glaube sogar am Thema vorbei.
Dafür gibts hier jetzt mal eine ganz einfache Übersetzung des Vorschlags von Wikipedia zur Monte-Carlo Methode:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
tropfenzahl,
innerhalb,
gesamt: Integer;
dotx,
doty,
piwert: Extended;
begin
tropfenzahl := StrToInt(Edit1.Text);
innerhalb := 0;
gesamt := tropfenzahl;
Progressbar1.Max := tropfenzahl;
while(tropfenzahl>0) do
begin
Randomize;
dotx := 2 * Random-1;
doty := 2 * Random-1;
if(Sqrt(dotx*dotx + doty*doty) <= 1) then
begin
innerhalb := innerhalb +1;
end;
tropfenzahl := tropfenzahl -1;
Progressbar1.Position := Gesamt - tropfenzahl;
Application.ProcessMessages;
end;
Edit2.Text := FloatToStr(4*innerhalb/gesamt);
end;
Wie gesagt, einfach aus meinem Testprogrämmle kopiert, und ohne weiteres Tuning