Trong trường hợp hình tròn, nó đủ để tạo một góc đồng nhất, , trên và sau đó tạo bán kính, , bất cứ điều gì mong muốn. Nếu bạn muốn Cartesian, thay vì tọa độ cực, và .θ[ 0 , 2 π)rx = r cosθy= R sinθ
Một cách thực sự dễ dàng để tạo các điểm ngẫu nhiên từ phân bố đồng đều một hình cầu d (một siêu cầu trong không gian có kích thước tùy ý , với bề mặt của chiều ), là tạo ra các quy tắc chuẩn đa biến , và sau đó chia tỷ lệ theo khoảng cách từ gốc:d+ 1dXTôi~ Nd+ 1( 0 , tôi)
YTôi= XTôi/ | | XTôi| |,
nơilà chỉ tiêu Euclide .| | . | |
Trong R, hãy tạo ra trên bề mặt của một hình cầu (2-):
x <- matrix(rnorm(300),nc=3)
y <- x/sqrt(rowSums(x^2))
head(y)
[,1] [,2] [,3]
[1,] 0.9989826 -0.03752732 0.02500752
[2,] -0.1740810 0.08668104 0.98090887
[3,] -0.7121632 -0.70011994 0.05153283
[4,] -0.5843537 -0.49940138 0.63963192
[5,] -0.7059208 0.20506946 0.67795451
[6,] -0.6244425 -0.70917197 0.32733262
head(rowSums(y^2))
[1] 1 1 1 1 1 1
Đây là dữ liệu từ hai góc độ hơi khác nhau:
Sau đó, bạn có thể mở rộng đến bất kỳ bán kính nào khác mà bạn thích.
Trong các kích thước thấp, có nhiều cách nhanh hơn, nhưng nếu trình tạo số ngẫu nhiên bình thường của bạn nhanh một cách hợp lý, thì nó khá tốt ở các kích thước cao hơn.
Có một số gói trên CRAN để thống kê thông tư, bao gồm CircStats
và circular
. Có lẽ có một cái gì đó trên CRAN tạo ra các bản phân phối đồng đều trên n-spher cho n> 1, nhưng tôi không biết về nó.