Làm thế nào để tạo các điểm phân bố đồng đều trên bề mặt của khối cầu 3-d?


68

Tôi đang tự hỏi làm thế nào để tạo các điểm phân bố đồng đều trên bề mặt của khối cầu 3-d? Ngoài ra sau khi tạo các điểm đó, cách tốt nhất để hình dung và kiểm tra xem chúng có thực sự đồng nhất trên bề mặt x2+y2+z2=1 không?


Nếu theo đồng phục, bạn có nghĩa là "thường xuyên", không có cách nào để làm như vậy ngoài n = 2, 4, 6, 8, 12, 20.
Marcos

1
Có gì sai với mẫu từ MultiVariateGaussian và vectơ đó chỉ bình thường hóa nó: v = MultivariateNormal(torch.zeros(10000), torch.eye(10000))và sau đó v = v/v.norm(10000)
Pinocchio

Câu trả lời:


72

Một phương pháp tiêu chuẩn là tạo ra ba quy tắc chuẩn và xây dựng một vectơ đơn vị từ chúng. Đó là, khi λ 2 = X 2 1 + X 2 2 + X 2 3 , sau đó ( X 1 / λ , X 2 / λ , X 3 / λ ) được phân bố đều trên Hình cầu. Phương pháp này cũng hoạt động tốt cho các quả cầu d -chiều, quá.XiN(0,1)λ2=X12+X22+X32(X1/λ,X2/λ,X3/λ)d

Trong 3D, bạn có thể sử dụng lấy mẫu từ chối: vẽ từ phân phối [ - 1 , 1 ] thống nhất cho đến khi độ dài của ( X 1 , X 2 , X 3 ) nhỏ hơn hoặc bằng 1, sau đó - giống như với phương pháp trước - bình thường hóa vectơ thành đơn vị chiều dài. Số lượng thử nghiệm dự kiến ​​cho mỗi điểm hình cầu bằng 2 3 / ( 4 π / 3 ) = 1,91. Ở các chiều cao hơn, số lượng thử nghiệm dự kiến ​​sẽ rất lớn, điều này nhanh chóng trở nên không thể thực hiện được.Xi[1,1](X1,X2,X3)23/(4π/3)

Có nhiều cách để kiểm tra tính đồng nhất . Một cách gọn gàng, mặc dù hơi chuyên sâu về mặt tính toán, là với chức năng K của Ripley . Số lượng dự kiến của các điểm trong phạm vi (3D Euclide) khoảng cách của bất kỳ vị trí nào trên phạm vi tỷ lệ với diện tích của hình cầu trong khoảng cách ρ , bằng pi ρ 2 . Bằng cách tính toán tất cả các khoảng cách điểm, bạn có thể so sánh dữ liệu với lý tưởng này.ρρπρ2

Các nguyên tắc chung của việc xây dựng đồ họa thống kê cho thấy một cách tốt để so sánh là vẽ các phần dư ổn định phương sai so với i = 1 , 2 , Lỗi , n ( n - 1 ) / 2 = m nơi d [ i ]i thứ nhỏ nhất của khoảng cách lẫn nhau và e i = 2 ei(d[i]ei)i=1,2,,n(n1)/2=md[i]ith . Cốt truyện nên gần bằng không. (Cách tiếp cận này là độc đáo.)ei=2i/m

Dưới đây là hình ảnh của 100 hình vẽ độc lập từ phân bố hình cầu đồng nhất thu được bằng phương pháp đầu tiên:

100 điểm hình cầu đồng nhất

Dưới đây là sơ đồ chẩn đoán khoảng cách:

Sơ đồ chẩn đoán

Thang đo y cho thấy các giá trị này gần bằng không.

Dưới đây là sự tích lũy của 100 lô như vậy để gợi ý độ lệch kích thước nào thực sự có thể là các chỉ số đáng kể về tính không đồng nhất:

Giá trị mô phỏng

(Những mảnh đất này trông rất giống những cây cầu Brown ... có thể có một số khám phá lý thuyết thú vị ẩn giấu ở đây.)

Cuối cùng, đây là sơ đồ chẩn đoán cho một bộ gồm 100 điểm ngẫu nhiên thống nhất cộng thêm 41 điểm khác được phân phối đồng đều ở bán cầu trên:

Mô phỏng các giá trị không đồng nhất

Liên quan đến phân bố đồng đều, nó cho thấy sự giảm đáng kể về khoảng cách điểm trung bình ra một phạm vi của một bán cầu. Điều đó tự nó là vô nghĩa, nhưng thông tin hữu ích ở đây là một cái gì đó không đồng nhất trên quy mô của một bán cầu. Trong thực tế, âm mưu này dễ dàng phát hiện ra rằng một bán cầu có mật độ khác với mật độ khác. (Một bài kiểm tra chi bình phương đơn giản hơn sẽ thực hiện điều này với nhiều sức mạnh hơn nếu bạn biết trước bán cầu nào để kiểm tra trong số vô số những điều có thể.)


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

23
XN(0,In)Inn×nQQXN(0,In)XY=X/X2 Q X Y Y 2 = 1YQ=QX/QX2=QX/X2Q. Vì là bất biến đối với các phép quay, cũng vậy và vì gần như chắc chắn, nên nó phải được phân bố đồng đều trên mặt cầu. XYY2=1
Đức Hồng Y

3
@Mike Không, vì phân phối đồng đều của vĩ độ không phân phối đồng đều trên mặt cầu. (Hầu hết bề mặt của hình cầu nằm ở vĩ độ thấp gần Xích đạo cách xa cực. Bạn cần phân phối đồng đều .)cos ( ϕ )ϕcos(ϕ)
whuber

1
@Ahsan Vì các ma trận trực giao tạo thành một nhóm biến đổi bảo toàn diện tích của hình cầu, nên sự phân bố đồng đều trên tập con của hình cầu có dạng : nhưng đây là toàn bộ hình cầu. X/||X||2
whuber

1
@Cesar "Phân phối đồng đều" (trên hình cầu).
whuber

19

Đây là một số mã R khá đơn giản

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)     

Rất đơn giản để thấy từ việc xây dựng rằng và vì vậy nhưng nếu cần phải thử nghiệm thìx2+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

và dễ dàng kiểm tra rằng mỗi và được phân phối đồng đều trên ( rõ ràng là ) vớixy[1,1]z

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

Rõ ràng, với giá trị , và được phân bố đồng đều xung quanh một vòng tròn bán kính và điều này có thể được kiểm tra bằng cách xem xét sự phân bố của arctangent theo tỷ lệ của chúng. Nhưng vì có cùng phân phối biên như và như , nên một tuyên bố tương tự là đúng đối với bất kỳ cặp nào và điều này cũng có thể được kiểm tra. zxy1z2zxy

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

Nếu vẫn không thuyết phục, các bước tiếp theo sẽ là xem xét một số phép quay 3 chiều tùy ý hoặc có bao nhiêu điểm rơi trong một góc vững chắc nhất định, nhưng điều đó bắt đầu phức tạp hơn, và tôi nghĩ là không cần thiết.


Tôi chỉ tự hỏi liệu phương pháp tạo điểm của bạn (x, y, z) về cơ bản có giống như phương pháp của người đánh máy không?
Qiang Li

3
Không, không phải thế: whuber sử dụng ba số ngẫu nhiên trong khi tôi sử dụng hai số. Của tôi là một trường hợp đặc biệt "tạo một điểm trên với mật độ phù hợp [tỷ lệ với ] và sau đó bước xuống một chiều". Ở đây thuận tiện vì đây chính thức là một hình cầu 2 . [1,1](1z2)n/21n=2
Henry

3
Hoặc, nói chung, tạo các điểm đồng nhất trên bản đồ bằng cách sử dụng bất kỳ phép chiếu nào có diện tích bằng nhau (của bạn là một diện tích bằng nhau hình trụ), sau đó chiếu lại. (+1)
đánh bóng

@whuber: Thật vậy. Không chính thức, nhưng đối với bất kỳ ai quan tâm, tôi có một lựa chọn tương tác các dự đoán bản đồ thế giới ở đây , một số trong đó có diện tích bằng nhau
Henry

2
Đây là khá nhiều cách tiếp cận tiêu chuẩn được sử dụng trong đồ họa máy tính, dựa trên Định lý Hat-Box của Archimedes: mathworld.wolfram.com/ArchimedesHat-BoxTheorem.html
Edward KMITT

10

Nếu bạn muốn lấy mẫu các điểm phân bố đồng đều trên quả cầu 3D (nghĩa là bề mặt của quả bóng 3D), hãy sử dụng từ chối đơn giản hoặc phương pháp của Marsaglia (Ann. Math. Statist., 43 (1972), trang 645 646). Đối với kích thước thấp, tỷ lệ loại bỏ khá thấp.

Nếu bạn muốn tạo các điểm ngẫu nhiên từ các quả cầu và bóng có chiều cao hơn, thì nó phụ thuộc vào mục đích và quy mô của mô phỏng. Nếu bạn không muốn thực hiện các mô phỏng lớn, hãy sử dụng phương pháp của Muller (Commun. ACM, 2 (1959), trang 19 Quay20) hoặc phiên bản "bóng" của nó (xem bài viết của Harman & Lacko đã trích dẫn ở trên). Đó là:

để có được một mẫu phân bố đồng đều trên một hình cầu n (bề mặt) 1) tạo X từ phân phối chuẩn 2 chiều 2) chia mỗi thành phần của X theo chỉ tiêu Euclide của X

để có được một mẫu được phân phối đồng đều trên một quả bóng n (bên trong) 1) tạo X từ (n + 2) phân phối chuẩn 2 chiều tiêu chuẩn 2) chia mỗi thành phần của X theo chỉ tiêu Euclide của X và chỉ lấy n thành phần đầu tiên

Nếu bạn muốn thực hiện các mô phỏng lớn, thì bạn nên điều tra các phương pháp chuyên biệt hơn. Theo yêu cầu, tôi có thể gửi cho bạn bài viết của Harman và Lacko về các phương pháp phân phối có điều kiện, cung cấp sự phân loại và khái quát hóa của một số thuật toán được đề cập trong cuộc thảo luận này. Liên hệ có sẵn tại trang web của tôi (http://www.iam.fmph.uniba.sk/ospm/Lacko)

Nếu bạn muốn kiểm tra xem các điểm yout có thực sự đồng đều trên bề mặt hoặc bên trong quả bóng hay không, hãy nhìn vào các lề (tất cả đều giống nhau, vì tính bất biến xoay, chỉ tiêu bình phương của mẫu được chiếu là phân phối beta).


Có gì sai với mẫu từ MultiVariateGaussian và vectơ đó chỉ bình thường hóa nó: v = MultivariateNormal(torch.zeros(10000), torch.eye(10000))và sau đó v = v/v.norm(10000)
Pinocchio

8

Tôi đã gặp một vấn đề tương tự (n-sphere) trong thời gian làm Tiến sĩ và một trong những mẫu 'từ chối' của các chuyên gia địa phương từ một khối n! Điều này, tất nhiên, sẽ có thời đại của vũ trụ khi tôi đang nhìn vào thứ tự của những kẻ ngu ngốc.

Thuật toán tôi đã sử dụng rất đơn giản và được xuất bản trong:

WP Petersen và A. Bernasconic Lấy mẫu thống nhất từ ​​một hình cầu n: Phương pháp đẳng hướng Báo cáo kỹ thuật, TR-97-06, Trung tâm tính toán khoa học Thụy Sĩ

Tôi cũng có tài liệu này trong thư mục mà tôi chưa xem. Bạn có thể thấy nó hữu ích.

Harman, R. & Lacko, V. Trên các thuật toán phân tách để lấy mẫu thống nhất từ spheres và -balls Tạp chí Phân tích đa biến, 2010nn


Có thể đăng các liên kết nơi tôi có thể tìm thấy toàn văn của các tài liệu tham khảo này không? cảm ơn.
Qiang Li

Tôi không có giấy cho tôi, nhưng trang này dường như mô tả thuật toán (và một số khác) mlahanas.de/Math/nsphere.htmlm
emakalic

3
Theo tôi hiểu, (từ bài báo của Petersen và Bernasconic) cho một quả bóng d chiều, người ta có thể tạo ra bán kính bằng cách nâng một biến thiên U (0,1) lên công suất (1 / d) và góc cuối cùng là một Biến thiên U (0,2 ). Các góc trung gian có thể thu được là , trong đó là . Đối với tôi điều này nghe có vẻ đơn giản. Điều tôi băn khoăn là đây: nếu tôi sử dụng một chuỗi ngẫu nhiên gần đúng cho đồng phục của mình, liệu tôi có nhận được sự độc đáo trong quả bóng không? πC.asin(uk)C1
πΓ(k2+0.5)Γ(k2+1)
Mohit

3

Tôi đã có vấn đề này trước đây, và đây là một giải pháp thay thế mà tôi tìm thấy,

Đối với bản phân phối, công thức tôi thấy hoạt động tốt là sử dụng tọa độ cực (tôi thực sự sử dụng một biến thể của tọa độ poler đã phát triển), sau đó chuyển đổi sang tọa độ Cartesian.

Bán kính dĩ nhiên là bán kính của hình cầu mà bạn đang vẽ. Sau đó, bạn có giá trị thứ hai cho góc trên mặt phẳng, tiếp theo là giá trị thứ ba là góc trên hoặc dưới mặt phẳng đó.

Để có được phân phối hợp lý, giả sử rằng U là số ngẫu nhiên phân bố đồng đều, r là bán kính, a là tọa độ cực thứ hai và b là tọa độ cực thứ ba,

a = U * 360 b = U + U-1 sau đó chuyển đổi sang cartesian qua x = r * sin (b) sin (a) z = r sin (b) cos (a) y = r sin (b)

Gần đây tôi đã tìm thấy những điều sau đây về mặt toán học tốt hơn, a = 2 (pi) * U b = cos ^ -1 (2U-1)

Không khác nhiều so với công thức ban đầu của tôi, mặc dù của tôi là độ so với radian.

Phiên bản gần đây được cho là có thể được sử dụng cho các siêu thị, mặc dù không có đề cập nào được thực hiện về cách đạt được nó.

Mặc dù tôi kiểm tra tính đồng nhất một cách trực quan bằng phương pháp tạo bản đồ khá rẻ cho Homewworld 2 và sau đó "chơi" các bản đồ đó. Trên thực tế, vì các bản đồ được tạo bằng các tập lệnh lua, bạn có thể xây dựng công thức của mình ngay trên bản đồ và do đó kiểm tra nhiều lần lấy mẫu mà không bao giờ rời khỏi trò chơi. Có lẽ không khoa học, nhưng là một phương pháp tốt để nhìn thấy kết quả.


2

Đây là mã giả:

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

Trong pytorch:

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

Tôi không hiểu rõ điều này đủ nhưng tôi đã được người nói rằng:

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

cũng đúng, tức là lấy mẫu từ một thông thường đơn biến cho mỗi tọa độ.


0

Dự đoán tốt nhất của tôi là trước tiên sẽ tạo ra một tập hợp các điểm phân bố đồng đều trong không gian 2 chiều và sau đó chiếu các điểm đó lên bề mặt của một hình cầu bằng cách sử dụng một số phép chiếu.

Bạn có thể sẽ phải trộn và kết hợp cách bạn tạo các điểm với cách bạn ánh xạ chúng. Về mặt phát triển điểm 2D, tôi nghĩ rằng các chuỗi chênh lệch thấp được xáo trộn sẽ là một nơi tốt để bắt đầu (nghĩa là chuỗi Sobol bị xáo trộn) vì nó thường tạo ra các điểm không bị "vón cục lại với nhau". Tôi không chắc chắn về việc sử dụng loại ánh xạ nào, nhưng Woflram đã bật lên phép chiếu Gnonom ... vì vậy có lẽ nó có thể hoạt động?

MATLAB có một triển khai tốt các chuỗi sai lệch thấp mà bạn có thể tạo bằng cách sử dụng q = sobolset(2)và xáo trộn bằng cách sử dụng q = scramble(q). Ngoài ra còn có một hộp công cụ ánh xạ trong MATLAB với một loạt các hàm chiếu khác nhau mà bạn có thể sử dụng trong trường hợp bạn không muốn tự viết mã bản đồ và đồ họa.


1
bất kỳ dự đoán nào trong số những dự đoán này vẫn có thể bảo tồn tính đồng nhất của tính ngẫu nhiên? Một lần nữa, làm thế nào tôi có thể kiểm tra xem phân phối cuối cùng của các điểm này có thực sự phân bố đồng đều trên bề mặt của hình cầu không? Cảm ơn.
Qiang Li

Xin lỗi, tôi chỉ nói theo giả thuyết ... Tôi nghĩ rằng các chức năng ánh xạ trên MATLAB sẽ cho phép bạn kiểm tra xem vì chúng có một số hình ảnh được nhúng trong chúng. Nếu không, tôi cũng tìm thấy một trang web đẹp nói về cách tạo các điểm phân phối đồng đều trên một hình cầu trong 3D bằng cách sử dụng những thứ như góc ngẫu nhiên, v.v. Họ cũng có một số mã C trên đó. Hãy xem
Berk U.

3
Các điểm ngẫu nhiên đồng nhất trên một phép chiếu gnomonic sẽ không đồng nhất trên mặt cầu, bởi vì gnomonic không có diện tích bằng nhau. Phép chiếu được đề xuất bởi Henry, -> (từ kinh độ-vĩ độ đến hình chữ nhật trong ), diện tích bằng nhau. ( λ , tội lỗi ( ϕ ) ) R 2(λ,ϕ)(λ,sin(ϕ))R2
whuber
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.