Ich möchte einen gleichmäßig zufälligen Punkt in einem Polygon abtasten ...
Wenn eine große Anzahl beprobt wird, fallen sie mit gleicher Wahrscheinlichkeit in zwei Regionen, wenn sie dieselbe Fläche haben.
Dies wäre ziemlich einfach, wenn es ein Quadrat wäre, da ich zwei Zufallszahlen in [0,1] als meine Koordinaten nehmen würde.
Die Form, die ich habe, ist ein reguläres Polygon, aber ich möchte, dass es für jedes Polygon funktioniert.
/programming/3058150/how-to-find-a-random-point-in-a-quadrangle
algorithms
randomness
sampling
random-number-generator
John Mangual
quelle
quelle
Eine einfache Möglichkeit ist es, die Zeichen - Box für Ihre Polygon und Verwendung Verwerfungsmethode zu finden: Probe aus dem Begrenzungsrahmen und akzeptieren , wenn sie innerhalb des Polygons fällt, die mit Wahrscheinlichkeit passieren werden mindestens (glaube ich).1 / 2
Eine andere Möglichkeit besteht darin, Ihr Polygon zu triangulieren. Abtasten Sie zuerst ein Dreieck proportional und dann einen zufälligen Punkt im Dreieck. Letzteres ist einfach: Bis zu affinen Transformationen haben alle Dreiecke die Form . Um einen Punkt aus dieser Verteilung gleichmäßig abzutasten, muss zuerst x ∈ [ 0 , 1 ] gemäß der Dichte 2 ( 1 - x ) abgetastet werden (dh es wird ein gleichmäßiges r abgetastet{ ( x , y) : x , y≥ 0 , x + y≤ 1 } x ∈ [ 0 , 1 ] 2 ( 1 - x ) und berechne x = 1 - √r ∈ [ 0 , 1 ] ) und danny∈[0,1-x]gleichmäßig abtasten (dh eine einheitliches∈[0,1]abtasten undy=(1-x)sberechnen). Eine noch einfachere Methode besteht darin,x,y∈[0,1]abzutastenund(x,y) durchx+y>1 zuersetzen.x = 1 - 1 - r- -- -- -- -√ y∈ [ 0 , 1 - x ] s ∈ [ 0 , 1 ] y= ( 1 - x ) s x , y∈ [ 0 , 1 ] x + y> 1 ( x , y) mit .( 1 - x , 1 - y)
quelle
Das ist ein bisschen verrückt, sollte aber gut funktionieren, auch wenn Ihr Polygon sehr seltsam ist.
http://siam.org/pdf/news/1297.pdf
Verwenden Sie dann die Vorwärtsbewegung einer einheitlichen Dichte auf der Disc als Vorschlagsdichte bei der Metropolis-Hastings-MCMC-Abtastung .
quelle