Welchen Zufallszahlengenerator fuer folgende Anforderungen...
-
Huhu,
Ich brauche einen Zufallszahlengenerator, hab aber keine Ahnung, welche von den Distributions ich da nehmen soll, da es da so viele gibt und manche mehr oder weniger gleich aussehen auf den ersten Blick.
Anforderungen:
- Zufallszahlen in einem Radius r um eine Zahl x
- Linear absteigende Haeufigkeit von x bis x-r bzw x+rKann mir da jemand helfen?
Gruesse,
Der Kellerautomat
-
http://www.boost.org/doc/libs/1_50_0/doc/html/boost/random/uniform_on_sphere.html
//Edit falsch. du musst 2 Zuallszahlen ziehen, eine für den Radius, eine für den Winkel. Den WInkel ziehst du gleichverteilt zwischen 0 und 2pi, den Radius zum Beispiel mit der boost triangle_distribution
-
Ich habe mich vielleicht etwas bloed ausgedrueckt. Radius und X sind gegeben, ich brauche genau 1 Zufallszahl im Intervall [x-r, x+r], wobei die Haeufigkeit von x am hoechsten ist und zum Radius linear abnimmt.
-
Verstehe ich das richtig, dass du 2D-Zufallszahlen möchtest?
Die erste Anforderung kannst du erfüllen, indem du ein Paar aus Radius und (gleichverteiltem) Winkel ziehst. Dann in gewünschtes Koordinatenformat umrechnen.
Die zweite Anforderung (ehrlich gesagt bin ich mir nicht ganz sicher, was du genau beschreiben möchtest, aber linear klingt einfach) kannst du mit der Inversionsmethode erfüllen, indem du diese auf den Radius loslässt.
Falls ich dich falsch verstehe und du einfach Zufallszahlen von x-dx bis x+dx mit einer einfachen Verteilung möchtest (dies wäre meine Zweitinterpretation deines Beitrags), dann auch: Inversionsmethode.
edit: Somit hat sich die erste Hälfte meines Beitrags wohl inzwischen erledigt.
-
D.h. ich muss hier welchen verwenden? http://en.cppreference.com/w/cpp/numeric/random
-
immer noch triangle.
-
Kellerautomat schrieb:
D.h. ich muss hier welchen verwenden? http://en.cppreference.com/w/cpp/numeric/random
Von denen keine. Wenn boost das hat, wie otze sagt, dann kommt das in Frage. Aber mit dem Stichwort, das ich dir gegeben habe, ist das sicher ganz leicht selbst zu machen (mathematisch). Und das sollte auch nicht schwer in gleichartiger Weise zu programmieren sein, wie die C++11-Verteilungen (programmiertechnisch).