- 昨日の続き
- 多次元球座標の関数と多次元トーラスの関数を別々に書いた
- 統一して書くと以下のようになるらしい
- k次元トーラス、k次元球の場合には、「角」の変数がk-1個必要なのは、トーラスも球も同じで、座標の増やし方の部分で
ret<-k*ret+C[i]*incr
- というように、「これまでのret」に増分を加えていく形になっている。
- この「これまでのret」をどの程度重みづけするかという観点から言うと、球は重みづけなし、トーラスは重みづけありという違い(らしい)
ただし、球と「球のように見えるトーラス」とでは、本質的に異なるので、曲線はつながらずに「ワープ」するようだ→「r<-0.8 # これを1にすると、連続性がなくなる(ようだ)」
sphereCoords<-function(v){
C<-cos(v)
S<-sin(v)
ret<-c(1,S)
for(i in 1:length(v)){
for(j in i:length(v)){
ret[i]<-ret[i]*C[j]
}
}
return(ret)
}
k<-2
incrRatio<-1
Ps<-c(7,11)
n<-1000
t<-seq(from=0,to=1,length.out=n)*2*pi
MultDimTorus3<-function(v,k){
C<-cos(v)
S<-sin(v)
ret<-rep(0,length(v)+1)
preret<-ret
for(i in 1:length(v)){
if(i==1){
ret[1]<-C[1]
ret[2]<-S[1]
}else{
incr<-ret-preret
preret<-ret
incr<-incr/sqrt(sum(incr^2))
ret<-k*ret+C[i]*incr
ret[i+1]<-S[i]
}
}
return(ret)
}
k<-2
incrRatio<-4
Ps<-c(3,5)
n<-10000
t<-seq(from=0,to=10,length.out=n)*2*pi
Xs<-matrix(0,length(t),k+1)
for(i in 1:length(t)){
Xs[i,]<-MultDimTorus3(t[i]*Ps,incrRatio)
}
xlim<-ylim<-zlim<-c(min(Xs),max(Xs))
plot3d(Xs[,1],Xs[,2],Xs[,3],cex=0.1,col=gray((1:length(t))/length(t)),xlim=xlim,ylim=ylim,zlim=zlim)
plot(as.data.frame(Xs))
matplot(Xs,type="l")
incrRatio<-4
Ps<-c(pi,exp(1))
t<-seq(from=0,to=10,length.out=n)*2*pi
Xs<-matrix(0,length(t),k+1)
for(i in 1:length(t)){
Xs[i,]<-MultDimTorus3(t[i]*Ps,incrRatio)
}
xlim<-ylim<-zlim<-c(min(Xs),max(Xs))
plot3d(Xs[,1],Xs[,2],Xs[,3],cex=0.1,col=gray((1:length(t))/length(t)),xlim=xlim,ylim=ylim,zlim=zlim)
plot(as.data.frame(Xs))
matplot(Xs,type="l")
k<-2
incrRatio<-1
Ps<-c(pi,exp(1))
t<-seq(from=0,to=10,length.out=n)*2*pi
Xs<-matrix(0,length(t),k+1)
for(i in 1:length(t)){
Xs[i,]<-MultDimTorus3(t[i]*Ps,incrRatio)
}
xlim<-ylim<-zlim<-c(min(Xs),max(Xs))
plot3d(Xs[,1],Xs[,2],Xs[,3],cex=0.1,col=gray((1:length(t))/length(t)),xlim=xlim,ylim=ylim,zlim=zlim)
plot(as.data.frame(Xs))
matplot(Xs,type="l")
k<-2
incrRatio<-0
Ps<-c(pi,exp(1))
t<-seq(from=0,to=10,length.out=n)*2*pi
Xs<-matrix(0,length(t),k+1)
for(i in 1:length(t)){
Xs[i,]<-MultDimTorus3(t[i]*Ps,incrRatio)
}
xlim<-ylim<-zlim<-c(min(Xs),max(Xs))
plot3d(Xs[,1],Xs[,2],Xs[,3],cex=0.1,col=gray((1:length(t))/length(t)),xlim=xlim,ylim=ylim,zlim=zlim)
plot(as.data.frame(Xs))
matplot(Xs,type="l")