Üç boyutlu ünite kürenin yüzeyinde düzgün dağılmış noktalar nasıl oluşturulur?


68

Üç boyutlu ünite küresi yüzeyinde düzgün dağılmış noktalar nasıl üretileceğini merak ediyorum. Ayrıca bu noktaları oluşturduktan sonra, yüzeyinde gerçekten düzgün olup olmadıklarını görselleştirmenin ve kontrol etmenin en iyi yolu x2+y2+z2=1nedir?


Üniforma ile "normal" demek istiyorsan, bunu n = 2, 4, 6, 8, 12, 20 dışında yapmanın yolu yoktur .
Marcos

1
bir MultiVariateGaussian örneğinde neyin yanlış olduğunu ve bu vektör onu normalleştirir: v = MultivariateNormal(torch.zeros(10000), torch.eye(10000))ve sonra v = v/v.norm(10000)
Pinocchio

Yanıtlar:


72

Standart bir yöntem, üç standart norm üretmek ve onlardan bir birim vektör oluşturmaktır. O zaman, bir ve λ 2 = x 2 1 + x 2 2 + x 2 3 , o zaman ( x 1 / λ , x 2 / λ , x 3 / λ ) eşit dağıtılır Küre. Bu yöntem, aynı zamanda d boyutlu alanlarda da işe yarar.XiN(0,1)λ2=X12+X22+X32(X1/λ,X2/λ,X3/λ)d

3B'de, reddetme örneklemesini kullanabilirsiniz: 'yi tek bir [ - 1 , 1 ] dağılımından ( X 1 , X 2 , X 3 ) uzunluğu 1'e eşit veya daha küçük olana kadar, sonra - aynen önceki yöntem - vektörü birim uzunluğa göre normalleştirir. Küresel nokta başına beklenen deneme sayısı 2 3 / ( 4 π / 3 ) = 1,91'dir. Daha yüksek boyutlarda, beklenen çalışma sayısı o kadar büyük olur ki bu hızla uygulanamaz hale gelir.Xi[1,1](X1,X2,X3)23/(4π/3)

Tekdüzeliliği kontrol etmenin birçok yolu vardır . Hesaplamalı olarak yoğun olmasına rağmen temiz bir yol Ripley K fonksiyonunda . Küre üzerindeki herhangi bir yerin (3B Öklid) mesafesi içindeki beklenen nokta sayısı π ρ 2'ye eşit olan ρ mesafesindeki kürenin alanıyla orantılıdır . Tüm interpoint mesafelerini hesaplayarak verileri bu idealle karşılaştırabilirsiniz.ρρπρ2

İstatistiksel grafikler oluşturmanın genel prensipleri, karşılaştırma yapmak için iyi bir yol olduğunu göstermektedir; varyans-dengelenmiş artıkları karşı i = 1 , 2 , , n ( n - 1 ) / 2 = m, d [ i ] bir i inci karşılıklı mesafe ve en küçük e i = 2 ei(d[i]ei)i=1,2,,n(n1)/2=md[i]ith . Arsa sıfıra yakın olmalıdır. (Bu yaklaşım sıradışıdır.)ei=2i/m

İlk yöntemle elde edilen tek biçimli bir küresel dağılımın 100 bağımsız çizimlerini gösteren resim:

100 düzgün küresel nokta

Mesafelerin teşhis grafiği:

Teşhis arsa

Y ölçeği, bu değerlerin hepsinin sıfıra yakın olduğunu göstermektedir.

İşte hangi boyut sapmalarının gerçekte tek biçimlilik olmadığının önemli göstergeleri olabileceğini gösteren 100 parselin birikimi:

Simüle edilmiş değerler

(Bu araziler Brownian köprülerine çok benziyor ... burada gizlenen bazı ilginç teorik keşifler olabilir.)

Son olarak, 100 üniform rastgele nokta kümesi artı sadece üst yarımkürede eşit şekilde dağılmış bir başka 41 nokta kümesi için tanı grafiği:

Simüle üniform olmayan değerler

Tekdüze dağılıma göre, ortalama bir aralıktaki bir yarımküreye kadar önemli bir azalma gösterir . Bu kendi içinde anlamsızdır, ancak buradaki yararlı bilgi, bir yarım kürenin ölçeğinde bir şeyin tek tip olmadığıdır. Aslında, bu çizim bir yarımkürenin diğerinden farklı bir yoğunluğa sahip olduğunu kolaylıkla tespit etmektedir. (Daha basit bir ki-kare testi , sonsuz sayıda olası testten hangi yarımküreyi test edeceğini önceden bilseydiniz daha fazla güçle bunu yapardı .)


(X1/λ,X2/λ,X3/λ)

23
XN(0,In)Inn×nQQXN(0,In)XY Q = Q X /Q X 2 = Q X /X 2 Q X Y Y 2 = 1Y=X/X2YQ=QX/QX2=QX/X2Q. Yana dönme değişmez, yani bir ve o zamandan beri hemen hemen kesin, o zaman eşit küre üzerinde dağıtılmalıdır. XYY2=1
Kardinal

3
@Hayır Hayır, çünkü enleminin düzgün bir dağılımı küre üzerinde düzgün bir dağılım vermez. (Kürenin yüzeyinin çoğu, Equator yakınındaki Polonyalılardan daha düşük enlemlerdedir. Bunun yerine , düzgün bir şekilde dağılımına ihtiyacınız vardır .)çünkü ( ϕ )ϕcos(ϕ)
whuber

1
@Ahsan Ortogonal matrisler, kürenin geçişi koruyan bir dönüşüm grubu oluşturduğundan, dağılım şeklindeki kürenin alt kümesi üzerinde aynıdır : ancak bu, tüm kürenin kendisidir. X/||X||2
whuber

1
@ Sezar "Düzgün dağılım" (küre üzerinde).
whuber

19

İşte bazı oldukça basit R kodu

n     <- 100000                  # large enough for meaningful tests
z     <- 2*runif(n) - 1          # uniform on [-1, 1]
theta <- 2*pi*runif(n) - pi      # uniform on [-pi, pi]
x     <- sin(theta)*sqrt(1-z^2)  # based on angle
y     <- cos(theta)*sqrt(1-z^2)     

ve böylece ancak test edilmesi gerekiyorsa görmek çok basitx2+y2=1z2x2+y2+z2=1

mean(x^2+y^2+z^2)  # should be 1
var(x^2+y^2+z^2)   # should be 0

ve her ve eşit olarak dağılmış olduğunu test etmek kolaydır ( açıkçası)xy[1,1]z

plot.ecdf(x)  # should be uniform on [-1, 1]
plot.ecdf(y)
plot.ecdf(z)

Açıkça, bir değeri verildiğinde , ve , yarıçapı etrafında eşit bir şekilde dağılmışlardır ve bu, oranlarının keskininin dağılımına bakarak test edilebilir. Fakat , ve aynı marjinal dağılıma sahip olduğundan , benzer bir ifade herhangi bir çift için de geçerlidir ve bu da test edilebilir. zxy1z2zxy

plot.ecdf(atan2(x,y)) # should be uniform on [-pi, pi]
plot.ecdf(atan2(y,z))
plot.ecdf(atan2(z,x))

Eğer hala ikna olmasaydı, bir sonraki adımlar keyfi bir 3B rotasyonuna bakmak ya da belirli bir açıda kaç nokta düştü, ancak bu daha karmaşıklaşmaya başlıyor ve bence gereksiz.


Sadece nokta üretme yönteminizin (x, y, z) esas olarak whuber yöntemiyle aynı olup olmadığını merak ediyorum.
Qiang Li

3
Hayır öyle değil: ben iki kullanırken, whuber üç rastgele sayı kullanıyor. Mine, " orantılı olarak uygun yoğunluğa sahip üzerinde bir nokta ve sonra bir boyut aşağı indir " özel bir durumdur . Burada uygun olarak çünkü bu resmen 2 küredir . ( 1 - z 2 ) n / 2 - 1 , n = 2[1,1](1z2)n/21n=2
Henry

3
Veya, daha genel olarak, herhangi bir eşit alan çıkıntısını kullanarak harita üzerinde tek biçimli noktalar oluşturun (sizinki silindirik bir eşit alandır) ve sonra geri yansıtın. (+1)
whuber

@whuber: Gerçekten. Offtopic, ama ilgilenen herkes için burada bir kısmı eşit alan olan dünya haritası projeksiyonlarının etkileşimli bir seçimine sahibim
Henry

2
Bu, Arşimet'in Hat-Box Teoremine dayanan bilgisayar grafiklerinde kullanılan standart yaklaşımdır: mathworld.wolfram.com/ArchimedesHat-BoxTheorem.html
Edward KMETT

10

3B küreye eşit dağılmış noktaları (örneğin 3B topun yüzeyini) örneklemek istiyorsanız, basit bir reddetme veya Marsaglia yöntemi kullanın (Ann. Math. Statist., 43 (1972), s. 645– 646). Düşük boyutlar için reddetme oranı oldukça düşüktür.

Yüksek boyutlu kürelerden ve toplardan rastgele noktalar oluşturmak istiyorsanız, bu simülasyonun amacına ve ölçeğine bağlıdır. Büyük simülasyonlar yapmak istemiyorsanız, Muller (Commun. ACM, 2 (1959), pp. 19-20) yöntemini veya "ball" versiyonunu kullanın (yukarıda belirtilen Harman ve Lacko'nun makalesine bakın). Yani:

n-küre (yüzey) 1) üzerinde eşit bir şekilde dağılmış bir örnek elde etmek için n-standart standart dağılımdan X üretin) 2) X'in her bir bileşenini Euclid'in X normuna bölün

Bir n-bilye (iç) 1) düzgün bir şekilde dağılmış bir numune almak için () n) (n + 2)-boyutlu standart normal dağılım 2) 'den X' i oluşturmak

Büyük simülasyonlar yapmak istiyorsanız, daha özel metotları araştırmalısınız. Talep üzerine, size bu tartışmada bahsedilen bazı algoritmaların sınıflandırılmasını ve genelleştirilmesini sağlayan koşullu dağıtım yöntemleri hakkında Harman ve Lacko makalesini gönderebilirim. İletişim web sitemde mevcuttur (http://www.iam.fmph.uniba.sk/ospm/Lacko)

Eğer puanların bir topun yüzeyinde mi yoksa iç kısmında tamamen tekdüze olup olmadığını kontrol etmek istiyorsanız, marjinallere bakın (hepsi aynı olmalıdır, dönme değişmezliği nedeniyle, yansıtılan bir örneğin kare normu beta dağılmıştır).


bir MultiVariateGaussian örneğinde neyin yanlış olduğunu ve bu vektör onu normalleştirir: v = MultivariateNormal(torch.zeros(10000), torch.eye(10000))ve sonra v = v/v.norm(10000)
Pinocchio

8

Doktora sırasında da benzer bir sorun yaşadım ve yerel “uzmanlardan” biri n-küpten reddetmeyi önerdi! Bu, elbette, evren çağını n olarak hunderds sırasına bakarken alırdı.

Kullandığım algoritma çok basit ve yayınlandı:

WP Petersen ve A. Bernasconic n-alandan tek tip örnekleme: İzotropik yöntem Teknik Rapor, TR-97-06, İsviçre Bilimsel Hesaplama Merkezi

Ayrıca, bu makaleye bakmadığım bibliyografimde de var. Kullanışlı bulabilirsiniz.

Harman, R. & Lacko, V. küre ve toplardan düzgün örnekleme için ayrıştırma algoritmaları hakkında Çok Değişkenli Analiz Dergisi, 2010nn


bu referansların tam metnini bulabileceğim linkleri göndermek mümkün müdür? Teşekkürler.
Qiang Li

Yanımda kağıt yok, ancak bu sayfa algoritmayı (ve diğer bazılarını) açıklıyor
emakalic

3
Anladığım kadarıyla (Petersen ve Bernasconic gazetesinden) d-boyutlu bir top için, (1 / d) gücüne göre bir U (0,1) yükselterek yarıçapı oluşturabilir ve U (0,2 ) değişkendir. Ara açıları olarak elde edilebilir , burada edilir . Bana göre bu kulağa oldukça basit geliyor. Merak ettiğim şudur: Üniformalar için yarı rasgele bir dizi kullanırsam, topun güzelliğini de alır mıyım? . a s i n ( k πC - 1 C.asin(uk)C1
πΓ(k2+0.5)Γ(k2+1)
Mohit

3

Bu problemi daha önce de yaşadım ve işte bulduğum bir alternatif.

Dağılımın kendisine gelince, düzgün çalıştığını belirlediğim formül kutupsal koordinatları kullanmaktır (aslında geliştirilen poler koordinatlarının bir varyasyonunu kullanıyorum), sonra Kartezyen koordinatlarına dönüştüm.

Tabii ki yarıçap, üzerine çizdiğiniz kürenin yarıçapıdır. Sonra düz düzlemde açı için ikinci değere sahip olursunuz, ardından o düzlemin üstündeki veya altındaki açı olan üçüncü değere sahip olursunuz.

Düzgün bir dağılım elde etmek için, U'nun tek biçimli olarak dağıtılmış rasgele bir sayı olduğunu, r'nin yarıçap, a'nın ikinci kutupsal koordinat olduğunu ve b'nin üçüncü kutupsal koordinat olduğunu,

a = U * 360 b = U + U-1, sonra x = r * sin (b) sin (a) z = r sin (b) çünkü kartezona dönüştürülür çünkü (a) y = r sin (b)

Geçenlerde matematiksel olarak daha iyi konuşulanları buldum, a = 2 (pi) * U b = cos ^ -1 (2U-1)

Aslına bakarsan benim asıl formülümden çok farklı değil, benimkiler radyan dereceye karşı derece.

Bu son versiyonun sözde hiperferler için kullanılabildiği halde, nasıl başarılacağına değinilmemiştir.

Her ne kadar homojenliği görsel olarak kontrol etsem, Homeworld 2 için haritalar yapmak ve daha sonra bu haritaları oynamak "oldukça ucuz bir yöntemle." Aslında, haritalar lua kodlarıyla yapıldığı için formülünüzü doğrudan haritaya yerleştirebilir ve böylece oyundan çıkmadan çok sayıda örneklemeyi kontrol edebilirsiniz. Belki bilimsel değil, sonuçları görsel olarak görmek için iyi bir yöntemdir.


2

İşte sahte kod:

  1. vMultiVariateGaussian(μ,σI)
  2. v=vv

Pytorch'ta:

v = MultivariateNormal(torch.zeros(10000), torch.eye(10000))
v = v/v.norm(2)

Bunu yeterince iyi anlayamadım, ancak şunu söyledim:

v = torch.normal(torch.zeros(10000), torch.eye(10000))
v = v/v.norm(2)

Aynı zamanda doğrudur, yani her bir koordinat için tek değişkenli bir normalden örnekleme.


0

En iyi tahminim, ilk önce 2 boyutlu uzayda düzgün dağılmış noktalar kümesi oluşturmak ve daha sonra bu noktaları bir tür çıkıntı kullanarak bir kürenin yüzeyine yansıtmak olacaktır.

Muhtemelen puanları üretme yönteminizle eşleştirdiğiniz şekilde karıştırmanız ve eşleştirmeniz gerekecektir. 2B nokta üretme açısından, karıştırılmış düşük tutarsızlık dizilerinin, genellikle "birlikte kümelenmemiş" noktalar ürettiği için başlamak için iyi bir yer (yani karıştırılmış bir Sobol dizisi) olacağını düşünüyorum. Hangi tür haritalamanın kullanılacağından emin değilim, ancak Woflram Gnonomik projeksiyonunu başlattı ... belki de işe yarayabilirdi?

MATLAB, kullanarak üretebileceğiniz q = sobolset(2)ve karıştırmanız gereken düşük tutarsızlık sekanslarına sahiptir q = scramble(q). Ayrıca, harita ve grafikleri kendiniz kodlamak istemediğiniz takdirde, kullanabileceğiniz birçok farklı projeksiyon fonksiyonuna sahip MATLAB'da bir harita araç kutusu da bulunmaktadır.


1
Bu projeksiyonlardan herhangi biri hala rasgeleliğin birliğini koruyabilir mi? Yine, bu noktaların son dağılımının küre yüzeyinde gerçekten eşit bir şekilde dağılmış olup olmadığını nasıl kontrol edebilirim? Teşekkürler.
Qiang Li

Üzgünüm, sadece varsayımsal olarak konuşuyordum ... Sanırım MATLAB üzerindeki haritalama fonksiyonları, içinde bazı görselleştirmeler bulunduğundan bunu kontrol etmenize izin verir. Olmazsa, aynı zamanda rastgele açılar gibi şeyleri kullanarak 3B bir alanda düzgün dağılmış noktalar oluşturma hakkında konuşan güzel bir web sitesi buldum. Orada da bazı C kodları var. Bir göz atın
Berk U.

3
(λ,ϕ)(λ,sin(ϕ))R2
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.