Gostaria de provar um ponto uniformemente aleatório em um polígono ...
Se provar um número grande, eles provavelmente cairão em duas regiões se tiverem a mesma área.
Isso seria bem simples se fosse um quadrado, pois eu usaria dois números aleatórios em [0,1] como minhas coordenadas.
A forma que tenho é um polígono regular, mas eu gostaria que funcionasse para qualquer polígono.
/programming/3058150/how-to-find-a-random-point-in-a-quadrangle
algorithms
randomness
sampling
random-number-generator
john mangual
fonte
fonte
Uma maneira fácil é encontrar a caixa delimitadora para o seu polígono e uso rejeição de amostragem: amostra da caixa delimitadora e aceito se ele cai dentro do polígono, o que vai acontecer com probabilidade , pelo menos, (eu acho).1 / 2
Outra possibilidade é triangular seu polígono. Primeiro experimente um triângulo de maneira proporcional e, em seguida, experimente um ponto aleatório no triângulo. O último é simples: até transformações afins, todos os triângulos têm a forma . Para amostrar uniformemente um ponto dessa distribuição, primeira amostra x ∈ [ 0 , 1 ] de acordo com a densidade 2 ( 1 - x ) (isto é, amostra um r uniforme{ ( x , y) : x , y≥ 0 , x + y≤ 1 } x ∈ [ 0 , 1 ] 2 ( 1 - x ) e calcule x = 1 - √r ∈ [ 0 , 1 ] ) e depois amostrary∈[0,1-x]uniformemente (ou seja, provar asuniforme∈[0,1]e calculary=(1-x)s). Um método ainda mais simples é a amostrax,y∈[0,1], e sex+y>1substitua(x,y)x=1−1−r−−−−√ y∈[0,1−x] s∈[0,1] y=(1−x)s x,y∈[0,1] x+y>1 (x,y) com .(1−x,1−y)
fonte
Isso é um pouco louco, mas deve funcionar bem, mesmo que seu polígono seja muito estranho.
Use o Teorema de Reimann para encontrar uma projecção conforme partir do disco de unidade para seu polígono, vendo-o como um subconjunto de . Veja, por exemplo, as referências em:C
http://siam.org/pdf/news/1297.pdf
Em seguida, use o pushforward de uma densidade uniforme no disco como a densidade proposta na amostragem Metropolis-Hastings MCMC .
fonte