20/03/19 16:40:30 XGan5JrS.net
球面に一様分布らしき点を5000個発生させて、
各々の点でθが5°の球冠面にその点以外にどれだけの点が含まれるかを算出させてみた。
URLリンク(upload.wikimedia.org)
中央値9 平均9.56 標準偏差3.14という値になった。
> summary(dots) ; sd(dots)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.000 7.000 9.000 9.556 12.000 23.000
[1] 3.148086
ヒストグラムだと
URLリンク(i.imgur.com)
# 球面一様分布 c(x,y,z)
vertex <- function(r=1){
x=runif(1,-1,1) # x ~ 一様分布[-1,1]
phi=runif(1,-pi,pi) # φ ~ 一様分布[-π,π]
y=sqrt(1-x^2)*cos(phi) # √(1-x^2)*cos(φ)
z=sqrt(1-x^2)*sin(phi) # √(1-x^2)*sin(φ)
r*c(x,y,z)
}
n=5000
vtx=t(replicate(n,vertex())) # n個の点x,y,zをつくる
rgl::plot3d(vtx[,1],vtx[,2],vtx[,3], col="slateblue")
Theta=(pi/180)*5
onCap <-function(x,y,theta){
acos(x %*% y) < theta # ベクトルの内積の逆余弦がtheta未満なら球冠上にある
}
hmonCap<- function(j){
count=0
for(i in (1:n)[-j]){
count = count + onCap(vtx[j,],vtx[i,],Theta)
}
return(count)
}
dots=sapply(1:n,hmonCap)
summary(dots) ; sd(dots)
hist(dots) ; table(dots)
BEST::plotPost(dots)