3次元等高線

  • 3次元の分布があって、そこに値がある。同じ値の点が曲面を作っているときに、この曲面は3次元空間の等高面
  • それを塗り分ける
# トーラスに値があるとしよう
k <- 3
# 乱点でトーラス
n.pt <- 100000
# 主要半径
R <- 5
# 副半径
r <- runif(n.pt)
# 主要半径の円の角度
t <- runif(n.pt) * 2 * pi
# 副半径の円の角度
u <- runif(n.pt) * 5 * pi
# トーラスの座標
X <- matrix(c(R*cos(t)+r*cos(u)*cos(t), R*sin(t)+r*cos(u)*sin(t), r * sin(u)),ncol=3)
# 3dプロットでxyz軸が等倍になるように点を加える
X <- rbind(X,matrix(c(5,5,5,-5,-5,-5),byrow=TRUE,ncol=3))
# 「標高」を適当に作る
v <- (X[,1]/2)^2 + (X[,2]/3)^3 + (X[,3]/8)^8
# 縞模様番号を点に与える
shima <- rep(0,length(v[1:n.pt]))
# 
range.v <- range(v)
# 色の数
num.colors <- 3
# 縞の細かさ
num.layers <- 20
shima <- floor(v/(diff(range.v))*num.layers+1)%%num.colors
# 3d plot
library(rgl)
plot3d(X,col=factor(shima),cex=0.01)