AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Annäherung an Pi mit Monte carlo, paintbox

Annäherung an Pi mit Monte carlo, paintbox

Ein Thema von Borgschüler · begonnen am 19. Jan 2012 · letzter Beitrag vom 19. Jan 2012
Antwort Antwort
Seite 1 von 2  1 2   
Borgschüler

Registriert seit: 6. Sep 2007
20 Beiträge
 
#1

AW: Annäherung an Pi mit Monte carlo, paintbox

  Alt 19. Jan 2012, 11:16
tigü ja genau, so soll es aussehen!
tigü, hast du meinen quelltext imn ersten beitrag eins zu eins übernommen?
hmm, dann probier ich mal, den radius mit paintbox width auszudürcken!

EDIT: Ich werd noch wahnsinnig, jetzt hab ich < paintbox1.width und es geht immer noch nicht!


übrigens:

als zum berechnen von pi dachte ich mir

K/Q = 200²Pi/200²

erklärung: Verhältnis der punkte von Kreis und Quadrat(gesamtes) = verhältnis von Viertelkreisgleichung mit festgelegtem radius und fläche von quadrat

und daraus drück ich mir aus:

K/Q mal 4 = Pi
  Mit Zitat antworten Zitat
Borgschüler

Registriert seit: 6. Sep 2007
20 Beiträge
 
#2

AW: Annäherung an Pi mit Monte carlo, paintbox

  Alt 19. Jan 2012, 11:21
so so schaut das aus bei mir, siehe anhang
Angehängte Grafiken
Dateityp: jpg monte carlo.jpg (31,6 KB, 26x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#3

AW: Annäherung an Pi mit Monte carlo, paintbox

  Alt 19. Jan 2012, 11:27
Kann es sein dass die Paintbox auf dem Formular einfach zu klein ist?

Liebe Grüße,
Valentin
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.660 Beiträge
 
Delphi 12 Athens
 
#4

AW: Annäherung an Pi mit Monte carlo, paintbox

  Alt 19. Jan 2012, 11:32
Vielleicht legt sich kurz ein anderes Fenster drüber. Verschieb das Zeichnen doch mal ins OnPaint der PaintBox, da gehört es ja auch hin. Bei mir wird die Grafik auch korrekt dargestellt.

[edit] Meine Änderungen:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure PaintBox1Paint(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    FPainting: Boolean;
  public
    { Public-Deklarationen }
  end;

...

procedure TForm1.Button1Click(Sender: TObject);
begin
  paintbox1.Width := 200;
  paintbox1.Height := 200;
  FPainting := not FPainting;
  PaintBox1.Invalidate;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  randomize;
end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
var
  i,x,y : integer;
begin
  if FPainting then
    for i := 1 to 100000 do
      begin
        x:= random(200);
        y:= random(200);
        if (sqrt(x*x+y*y) < 200) then
          paintbox1.canvas.pixels[x,y] := clred
        else
          paintbox1.canvas.pixels[x,y] := clgreen;
      end
  else
    PaintBox1.Canvas.FillRect(Rect(0, 0, PaintBox1.Width, PaintBox1.Height));
end;
[/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Borgschüler

Registriert seit: 6. Sep 2007
20 Beiträge
 
#5

AW: Annäherung an Pi mit Monte carlo, paintbox

  Alt 19. Jan 2012, 11:47
Liebe Leute, je nach dem wo die paintbox platziert ist, ist ein anderer teil zu sehn, bzw an einer stelle sieht man wirklich ein perfektes quadrat! aber seht selbst.

Wie kann das bitte sein? geht garnicht in meinen kopf!

ich werde jetzt die pi berechnung durchführen, und dann das ergebnis präsentieren.
Angehängte Grafiken
Dateityp: jpg monte carlo2.jpg (42,6 KB, 11x aufgerufen)
Dateityp: jpg monte carlo.jpg (31,6 KB, 10x aufgerufen)
Dateityp: jpg monetcarlo3.jpg (27,5 KB, 12x aufgerufen)
  Mit Zitat antworten Zitat
Borgschüler

Registriert seit: 6. Sep 2007
20 Beiträge
 
#6

AW: Annäherung an Pi mit Monte carlo, paintbox

  Alt 19. Jan 2012, 12:10
OK es klappt, Pi ist zwar relativ ungenau, aber das hat die monte carlo methode so ansich!

Aber kann mir vl jemand erklären, warum ich soviel rumprobieren musste, damit das ganze quadrat zu sehen ist?

Code:
procedure TForm1.Button1Click(Sender: TObject);
var i, count,x,y : integer;
pi : real;
begin
count := 0;
for i := 1 to 100000 do
 begin
  x:= random(200);
  y:= random(200);
   if (sqrt(x*x+y*y) < paintbox1.width) then
      begin
        count := count +1;
        paintbox1.canvas.pixels[x,y] := clred;
      end
      else
        paintbox1.canvas.pixels[x,y] := clgreen;
 end;
 pi := (4*count/100000);
 Label1.caption:= floattostr(pi);
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.075 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Annäherung an Pi mit Monte carlo, paintbox

  Alt 19. Jan 2012, 12:34
Aber kann mir vl jemand erklären, warum ich soviel rumprobieren musste, damit das ganze quadrat zu sehen ist?
Sollen wir jetzt schreiben, dass du es vorher nicht gerafft hast, oder wie?

1. war bei dir wahrscheinlich die Eigenschaften Width und Height (Length gibts nicht!) der Paintbox nicht auf 200 gesetzt (gut in den Screenshots weiter oben zu sehen) und du aber
2. immer konstant auf 200 anstatt wie jetzt auf Width verglichen hast.

Würde übrigens an der Stelle der If-Abfrage das Ergebnis der Wurzel noch per Round() runden, ansonsten werden Gleitkommazahlen mit Integerzahlen
verglichen, was nicht immer gut gehen muss. Der Kompiler castet zwar, aber ich hätte ein sicherers Gefühl.

Ansonsten die anderen Vorschläge mit einarbeiten!
  Mit Zitat antworten Zitat
einbeliebigername

Registriert seit: 24. Aug 2004
140 Beiträge
 
Delphi XE8 Professional
 
#8

AW: Annäherung an Pi mit Monte carlo, paintbox

  Alt 19. Jan 2012, 12:47
Hallo,

Aber kann mir vl jemand erklären, warum ich soviel rumprobieren musste, damit das ganze quadrat zu sehen ist?
Ich habe doch schon geschrieben was vermutlich passiert. Und ansonsten liegt es an der falschen Benutzung der PaintBox. Schreib mal am Ende von Button1Click noch die Zeile paintbox1.Invalidate; (bzw. paintbox1.Repaint; kannst du auch mal ausprobieren) hin. Und dann schreib hier mal was passiert und was du denkst wieso.

Einbeliebigername.
  Mit Zitat antworten Zitat
Borgschüler

Registriert seit: 6. Sep 2007
20 Beiträge
 
#9

AW: Annäherung an Pi mit Monte carlo, paintbox

  Alt 19. Jan 2012, 12:59
ok wenn ich paintbox1.invalidate oder paintbox1.repaint schreibe, verschwindet das gezeichnete. ich erklär mir das dadurch, dass die paintbox in den urzustand versetzt wird??

auf jedenfall danke leute, für die ganzen vorschläge!
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#10

AW: Annäherung an Pi mit Monte carlo, paintbox

  Alt 19. Jan 2012, 15:33
Mal was ganz Grundsätzliches

Eine Paintbox ist eine flüchtige Zeichenfläche.
Sobald eine Paintbox durch ein anderes Fenster überdeckt und wieder aufgedeckt wird,
ist der aufgedeckte Bereich "kaputt".

Will man eine TPainbox für die Ausgabe von Monte Carlo Punkten verwenden
muss man alle bisherigen Punkte in einem Array oder Liste zwischenspeichern.
Wenn dann das OnPaint-Event ausgelöst wird, muss man alle Punkte aus dem Array neu zeichnen.

Die Lösung von DeddyH geht auch in Ordnung; nur bekommt man nach jedem Aufdecken eine
neue Punktewolke.

Will man diesen Aufwand nicht betreiben sollte man TImage für die Ausgabe verwenden.
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 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