4次元ギャスケット

KABIRA2011-02-10

library(rgl)
library(MCMCpack)
N<-5
M<-50000
#library(sphere)

#N-1次元空間に均等にN本の単位ベクトルを配置する(N-1正単体)

CategoryVector<-function (nc = 3) 
{
    df <- nc - 1
    d <- df + 1
    diagval <- 1:d
    diagval <- sqrt((df + 1)/df) * sqrt((df - diagval + 1)/(df - 
        diagval + 2))
    others <- -diagval/(df - (0:(d - 1)))
    m <- matrix(rep(others, df + 1), nrow = df + 1, byrow = TRUE)
    diag(m) <- diagval
    m[upper.tri(m)] <- 0
    as.matrix(m[, 1:df])
}
cv<-CategoryVector(N)

# 正単体上の点を作る
# dirichletはsum x_i =1

P<-t(cv)%*%t(rdirichlet(1,rep(1,N)))
P<-c(P)
xs<-matrix(0,M,N-1)
selectedv<-sample(1:N,M,replace=TRUE)
for(i in 1:M){
	P<-(P+cv[selectedv[i],])/2
	xs[i,]<-P
	
}
# 3次元部分だけ描いてみる
#plot3d(xs[,1],xs[,2],xs[,3])
plot3d(xs[,1],xs[,2],xs[,3],xlim=c(-1,1),ylim=c(-1,1),zlim=c(-1,1),col=rainbow(1000)[500+xs[,4]*600])