3 boyutlu birim topunda düzgün dağılmış noktalar nasıl oluşturulur?


11

Önceki bir soru yayınladım , bu ilgili ama başka bir iş parçacığı başlatmak daha iyi olduğunu düşünüyorum. Bu sefer, 3 boyutlu birim kürenin içinde düzgün bir şekilde dağıtılmış noktalar nasıl üretileceğini ve dağıtımın görsel ve istatistiksel olarak nasıl kontrol edileceğini merak ediyorum? Orada yayınlanan stratejileri doğrudan bu duruma aktarılabilir görmüyorum.


4
Başlangıç ​​noktasındaki mesafesi içindeki nokta sayısının ile orantılı olması gerektiğini gözlemlediğinizde, önceki sorudaki teknikler doğrudan uygulanır . Eğer bağımsız tek tip değişken oluşturmak Böylece eğer içinde bir nokta ile birlikte ölçekleme, kürenin yüzeyi üzerine ile işe yaramaktadır. r 3 u [ 0 , 1 ] ağırlık ağırlık u 1 / 3rr3u[0,1]wwu1/3
whuber

@whuber: belki de önceki tekniklerin özünü alamadım. Açıkladığınız şeyi deneyeyim. Ayrıca, burada tek tipliği tekrar kontrol etmenin yolları nelerdir?
Qiang Li

2
@Qiang Ripley'nin K fonksiyonu ve ki kare testleri. Ayrıca, kürenin yüzeyindeki noktaların radyal izdüşümünün tekdüzeliğini, noktaların uzunluklarının küpünün tekdüzeliğini ve bu ikisinin bağımsızlığını da kontrol edebilirsiniz.
whuber

Benim için, "eşit olarak dağıtılmış" ne demek o kadar açık değil ... Ve muhtemelen tanımlamaya çalışmak otomatik olarak bir oluşturma algoritması yaratacaktır (=

@mbq, terimi tanımlamayı düşünüyorum, ihtiyacımız var . fR,Θ,Φ(r,θ,ϕ)=r2
Qiang Li

Yanıtlar:


14

En kolay yol, karşılık gelen hiperküpte noktaları eşit olarak örneklemek ve kürenin içinde yer almayanları atmaktır. 3D'de bu, zamanın yaklaşık% 50'sinde bu kadar sık ​​olmamalıdır. (Hiper küpün hacmi 1, kürenin hacmi )43πr3=0.523...


+1. Bu, comp.graphics.algorithms SSS "Küre üzerinde tekdüze rastgele noktalar"
David Cary

1
Ya bunu için yapmak istersek ? n>100
ares

2
Buna "ret yöntemi" denir. Üç boyutta, yirmi yedi boyutta iyi çalışırken, bir trilyon noktadan sadece bir tanesi 27 topun içinde bulunur ve 27 küpün geri kalanında değil, bu nedenle ret yöntemi iyi bir genelleme yapmaz. Bundan bahsediyorum çünkü şu anda 2.440 boyutlu bir topta eşit olarak örneklere ihtiyacım var.
Reb.Cabin

13

xyzx=rsinθcosϕy=rsinθsinϕz=rcosθ

ϕ02πrθrr3r3r2rθ(1cosθ)/21(1cos(θ))/2θ>π/2θsin(θ)/2

θ11

R'de bu, aşağıda gösterildiği gibi görünecektir.

n <- 10000 # For example n = 10,000.
phi <- runif(n, max=2*pi)
r <- runif(n)^(1/3)
cos_theta <- runif(n, min=-1, max=1)
x <- r * sqrt(1-cos_theta^2) * cos(phi)
y <- r * sqrt(1-cos_theta^2) * sin(phi)
z <- r * cos_theta

Bu cevabı yazarken ve düzenlerken, çözümün düşündüğümden daha az önemsiz olduğunu fark ettim.

(x,y,z)r

xyz <- matrix(rnorm(3*n), ncol=3)
lambda <- runif(n)^(1/3) / sqrt(rowSums(xyz^2))
xyz <- xyz*lambda

3
Bu, reddedilmemesi nedeniyle çok daha iyi bir cevaptır. Yüksek boyutlu alanlarda, düşük kabul olasılığı nedeniyle reddetme örneklemesi çok maliyetli olabilir.
kingledion

2
Kodun son biti daha yüksek boyuta uyarlanabilir d. Bunun için tüm örneklerini değiştirmek 3tarafından d.
gui11aume

0

PP=N/||N||U1/nNU[0,1]1/nn

Et voilà!


2
Eşit dağılmış bir yarıçap topta eşit bir nokta vermeyecektir ...
kjetil b halvorsen

1
U
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.