Saya ingin mencicipi titik acak seragam dalam poligon ...
Jika sampel dalam jumlah besar, mereka kemungkinan besar akan jatuh ke dalam dua wilayah jika mereka memiliki wilayah yang sama.
Ini akan sangat sederhana jika itu adalah kuadrat karena saya akan mengambil dua angka acak dalam [0,1] sebagai koordinat saya.
Bentuk yang saya miliki adalah poligon biasa, tetapi saya ingin poligon berfungsi untuk poligon apa pun.
/programming/3058150/how-to-find-a-random-point-in-a-quadrangle
algorithms
randomness
sampling
random-number-generator
John Mangual
sumber
sumber
Salah satu cara yang mudah adalah untuk menemukan kotak berlari polygon dan penggunaan penolakan sampling Anda: sampel dari kotak berlari dan menerima jika jatuh dalam poligon, yang akan terjadi dengan probabilitas setidaknya (saya pikir).1 / 2
Kemungkinan lain adalah melakukan triangulasi poligon Anda. Sampel pertama segitiga secara proporsional, lalu sampel titik acak dalam segitiga. Yang terakhir adalah sederhana: hingga transformasi affine, semua segitiga adalah dari bentuk . Untuk sampel seragam poin dari distribusi itu, sampel pertama x ∈ [ 0 , 1 ] menurut kepadatan 2 ( 1 - x ) (yaitu sampel seragam r{ ( x , y) : x , y≥ 0 , x + y≤ 1 } x ∈ [ 0 , 1 ] 2 ( 1 - x ) dan hitung x = 1 - √r ∈ [ 0 , 1 ] ) dan kemudian sampely∈[0,1-x]secara seragam (yaitu sampel a seragams∈[0,1]dan hitungy=(1-x)s). Metode yang lebih sederhana adalah dengan mengambil sampelx,y∈[0,1], dan jikax+y>1ganti(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) dengan .(1−x,1−y)
sumber
Ini sedikit gila, tetapi harus bekerja dengan baik walaupun poligon Anda sangat aneh.
Gunakan Reimann pemetaan teorema untuk menemukan peta konformal dari unit disk untuk poligon Anda, melihatnya sebagai bagian dari . Lihat, misalnya referensi di:C
http://siam.org/pdf/news/1297.pdf
Kemudian gunakan dorongan ke depan dari kerapatan yang seragam pada disk sebagai kerapatan proposal dalam pengambilan sampel Metropolis-Hastings MCMC .
sumber