2012-03-25 8 views
0

Ich schreibe ein Programm mit SDL. Ich habe den Bildschirm als 600x600 eingerichtet. Ich zeichne dann einen Kreis an den Fenstern. Ich schieße zufällig den ganzen Bildschirm mit Punkten und zähle schließlich, wie viele Punkte sich im Kreis befinden, mit denen man die Fläche des Kreises schätzen kann. Aber ich fand, dass, wenn ich das Fenster zu größerem initialisiere (wie 1024 * 768), dieselbe Methode die Genauigkeit der Gebietsberechnung (zu kleinem Ausmaß aber noch nicht so klein) senkt. Ich möchte wissen, erhöhen Sie die Auflösung der Fenster nicht dazu beitragen, die Auflösung dieses Problems zu verbessern? Wie kann ich die größere Auflösung nutzen?bezüglich der Auflösung und Genauigkeit in SDL

+3

Vielleicht, weil 1024x768 nicht quadratisch ist, also gibt es mehr Punkte außerhalb des Kreises? – Kos

+0

Nur aus Interesse, konnten Sie nicht die Fläche des Kreises herausarbeiten, indem Sie stattdessen seinen Radius finden und 'pi * r^2' auswerten? Oder fehlt mir etwas? –

+1

Wie generieren Sie Ihre Zufallszahlen? 'rand()' ist nicht zufällig genug, wenn Sie Numerik machen wollen. '' und verwenden Sie 'std :: mt19937', überprüfen Sie, ob das hilft – Kos

Antwort

0

Ich zeichne dann einen Kreis auf den Fenstern. Ich schieße zufällig den ganzen Bildschirm mit Punkten und zähle schließlich, wie viele Punkte sich im Kreis befinden, mit denen man die Fläche des Kreises schätzen kann.

Die Fläche des Kreises ist gleich pi*(r^2). Wobei "r" der Kreisradius ist.

Aber ich fand, dass, wenn ich initialisieren das Fenster zu vergrößern

Ihre Methode wird keine zuverlässigen Ergebnisse, es sei denn Zufallszahlengenerator ist perfekt Es bedeutet, dass es absolut perfekt gleichmäßige Verteilung von Punkten erzeugen müssen was nicht passieren wird. Auch Sie müssen Bereich von einem "Schlag" kennen, der ein großes Problem sein wird.

Wenn Sie darauf bestehen, das Rad neu zu erfinden (und vermeiden Sie pi*(r^2) aus unbekannten Gründen), dann statt "zufällige Punkte". Scannen Sie Bild für Zeile einfach und berechnen Sie die Anzahl der Punkte innerhalb des Kreises. Es wird auch wahrscheinlich viel schneller als der Versuch, Pseudozufallszahlengenerator zu missbrauchen. Und Sie können den Prozess beschleunigen (indem Sie die Genauigkeit verlieren) und anstatt jedes Pixel zu überprüfen, prüfen Sie jedes zweite Pixel (und jede Zeile), jedes 3., jedes 4. usw. (perfekte gleichmäßige Verteilung). Es wird viel zuverlässiger und berechenbarer sein als Ihr PRNG-Missbrauch.

Verwandte Themen