Dalam kasus lingkaran, cukup untuk menghasilkan sudut yang seragam, , pada dan kemudian buat jari-jari, , apa pun yang diinginkan. Jika Anda menginginkan Cartesian, daripada koordinat polar, dan .θ[ 0 , 2 π)rx = r cosθy= r dosaθ
Salah satu cara yang sangat mudah untuk menghasilkan titik acak dari distribusi seragam a-d-sphere (a hypersphere dalam ruang dimensi sewenang-wenang , dengan permukaan dimensi ), adalah untuk menghasilkan normals standar multivariat , lalu skala menurut jaraknya dari titik asal:d+1dXi∼Nd+1(0,I)
Yi=Xi/||Xi||,
dimanaadalah norma Euclidean .||.||
Dalam R, mari kita hasilkan pada permukaan bola (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
Inilah data dari dua sudut yang sedikit berbeda:
Anda kemudian dapat skala ke radius lain apa pun yang Anda suka.
Dalam dimensi rendah, ada cara yang lebih cepat, tetapi jika generator angka acak normal Anda cukup cepat, itu cukup baik dalam dimensi yang lebih tinggi.
Ada beberapa paket pada CRAN untuk statistik sirkuler, termasuk CircStats
dan circular
. Mungkin ada sesuatu di CRAN yang menghasilkan distribusi seragam di n-bola untuk n> 1, tapi saya tidak tahu itu.