Saya telah memposting pertanyaan sebelumnya , ini terkait tetapi saya pikir lebih baik memulai utas lainnya. Kali ini, saya bertanya-tanya bagaimana cara menghasilkan titik yang terdistribusi secara merata di dalam unit sphere 3-d dan bagaimana memeriksa distribusi secara visual dan statistik juga? Saya tidak melihat strategi yang diposting di sana secara langsung dapat ditransfer ke situasi ini.
random-generation
Qiang Li
sumber
sumber
Jawaban:
Cara termudah adalah dengan mengambil titik sampel secara seragam dalam hypercube yang sesuai dan membuang yang tidak terletak di dalam bola. Dalam 3D, ini seharusnya tidak terjadi sesering itu, sekitar 50% dari waktu. (Volume hypercube adalah 1, volume bola adalah )43πr3=0.523...
sumber
Anda juga dapat melakukan ini dalam koordinat bola, dalam hal ini tidak ada penolakan. Pertama Anda menghasilkan jari-jari dan dua sudut secara acak, kemudian Anda menggunakan rumus transisi untuk memulihkan , dan ( , , ).y z x = r sin θ cos ϕ y = r dosa θ sin ϕ z = r cos θx y z x=rsinθcosϕ y=rsinθsinϕ z=rcosθ
Anda menghasilkan tunggal antara dan . Jari-jari dan kemiringan tidak seragam. Probabilitas bahwa suatu titik berada di dalam bola jari-jari adalah sehingga fungsi kerapatan probabilitas adalah . Anda dapat dengan mudah memeriksa bahwa akar kubik dari variabel seragam memiliki distribusi yang persis sama, jadi ini adalah bagaimana Anda dapat menghasilkan . Probabilitas bahwa suatu titik terletak dalam kerucut bola yang didefinisikan oleh kecenderungan adalah atau jika0 2 π r θ r r 3 r 3 r 2 rϕ 0 2π r θ r r3 r 3r2 r θ (1−cosθ)/2 1−(1−cos(−θ))/2 θ>π/2 . Jadi kepadatan adalah . Anda dapat memeriksa bahwa minus arccosine dari variabel seragam memiliki kepadatan yang tepat.θ sin(θ)/2
Atau lebih sederhana, kita dapat mensimulasikan kosinus dari secara seragam antara dan .θ −1 1
Dalam R ini akan terlihat seperti yang ditunjukkan di bawah ini.
Dalam proses menulis dan mengedit jawaban ini, saya menyadari bahwa solusinya kurang sepele daripada yang saya kira.
Saya berpikir bahwa metode termudah dan paling efisien secara komputasi adalah mengikuti metode @ whuber untuk menghasilkan pada unit sphere seperti yang ditunjukkan pada posting ini dan skala mereka dengan .r(x,y,z) r
sumber
d
. Untuk ini, ganti semua instance3
olehd
.Menurut pendapat saya, opsi termudah yang juga menggeneralisasi ke bola dimensi yang lebih tinggi (yang bukan kasus koordinat bola dan apalagi kasus sampel penolakan) adalah untuk menghasilkan titik acak yang merupakan produk dari dua variabel acak mana adalah variabel acak Gaussian (yaitu isotropik, yaitu menunjuk ke segala arah secara seragam) dinormalisasi sehingga terletak pada bola dan yang merupakan variabel acak seragam dalam terhadap kekuatan , menjadi dimensi data, menjaga radius.P = N / | | N | | ∗ U 1 / n N U [ 0 , 1 ] 1 / n nP P=N/||N||∗U1/n N U [0,1] 1/n n
Dan lagi!
sumber