Chciałbym pobrać próbkę jednorodnie losowego punktu w wielokącie ...
Gdyby pobrać próbkę dużej liczby, równie dobrze mogliby wpaść w dwa regiony, jeśli mają ten sam obszar.
Byłoby to dość proste, gdyby był kwadratem, ponieważ jako moje współrzędne wziąłbym dwie liczby losowe w [0,1].
Kształt, który mam, jest zwykłym wielokątem, ale chciałbym, aby działał dla każdego wielokąta.
/programming/3058150/how-to-find-a-random-point-in-a-quadrangle
algorithms
randomness
sampling
random-number-generator
John Mangual
źródło
źródło
Jednym prostym sposobem jest znalezienie ramki granicznej dla swojego wielokąta i użycie próbkowania odrzucenia: pobierz próbkę z ramki granicznej i zaakceptuj, czy mieści się ona w wielokącie, co nastąpi z prawdopodobieństwem1 / 2 przynajmniej (tak mi się wydaje).
Inną możliwością jest triangulacja wielokąta. Najpierw próbkuj trójkąt w sposób proporcjonalny, a następnie próbkuj losowy punkt w trójkącie. To ostatnie jest proste: aż do afinicznych przekształceń, wszystkie trójkąty mają formę{ ( x , y) : x , y≥ 0 , x + y≤ 1 } . Aby równomiernie próbkować punkt z tego rozkładu, pierwsza próbkax ∈ [ 0 , 1 ] zgodnie z gęstością 2 ( 1 - x ) (tj. próbka munduru r ∈ [ 0 , 1 ] i oblicz x = 1 -1 - r----√ ), a następnie próbka y∈ [ 0 , 1 - x ] równomiernie (tzn. próbkuj mundur s ∈ [ 0 , 1 ] i oblicz y= ( 1 - x ) s ). Jeszcze prostszą metodą jest próbkowaniex , y∈ [ 0 , 1 ] , i jeśli x + y> 1 zastąpić ( x , y) z ( 1 - x , 1 - y) .
źródło
To trochę szalone, ale powinno działać dobrze, nawet jeśli twój wielokąt jest bardzo dziwny.
Skorzystaj z twierdzenia o odwzorowaniu Reimanna, aby znaleźć mapę konformalną z dysku jednostki na wielokąt, widząc ją jako podzbiórdo . Zobacz na przykład odniesienia w:
http://siam.org/pdf/news/1297.pdf
Następnie użyj przesunięcia o jednolitą gęstość na dysk jako gęstość propozycji w próbkowaniu MetropMC-Hastings MCMC .
źródło