トーラス状組織

KABIRA2011-07-01

  • こちらのコメントから
  • 2次元以外の場合を考える
  • 3次元の点の集合でも同じように計算したのが以下のソース
  • 高次元はRのarrayの次元を増やすことで対応できそうである
  • 一方でグラフの場合がまだできていない
  • 今回の3次元の場合はトーラス(表面)
    • 一見安定そうな中心が途中で消えることがある
  • では安定性とは何か、robustな現象は何か
  • 教科書
    • しばらくこの本を読む

存在から発展へ―物理科学における時間と多様性

存在から発展へ―物理科学における時間と多様性

library(rgl)
Nx<-35
Ny<-35
Nz<-35
Nt<-30

U<-tempU<-array(0,c(Nx,Ny,Nz))
#トーラスを作る
A<-array(0,c(Nx,Ny,Nz))
r1<-10
r2<-5
for(x in 1:Nx){ 
for(y in 1:Nx){
for(z in 1:Nz){

	l<-sqrt((sqrt((x-Nx/2)^2+(y-Ny/2)^2)-r1)^2+(z-Nz/2)^2)
	if(((r2-2)^2<=l^2)&&(l^2 <= r2^2)){A[x,y,z]<-1}
#	if(l^2 <= r2^2){A[x,y,z]<-1}
}}}

a<--3;b<-3

#初期条件

#U[24000]<-b+2
U<-array(sample((-1):b,Nx*Ny*Nz,replace=TRUE),c(Nx,Ny,Nz))
#U[floor(Nx/2),,]<-a;U[floor(Nx/2)+1,1:floor(Ny/2),]<-b
#U[(floor(Nx/2)-r1+r2-2):(floor(Nx/2)+r1-r2+2),(floor(Ny/2)-r1+r2-2):(floor(Ny/2)+r1-r2+2),floor(Nz/2)]<-b;U[(floor(Nx/2)-r1+r2-2):(floor(Nx/2)+r1-r2+2),(floor(Ny/2)-r1+r2-2):(floor(Ny/2)+r1-r2+2),floor(Nz/2)+1]<-a


U<-U*A

for (t in 1:Nt){

for(x in 1:Nx){
for(y in 1:Ny){
for(z in 1:Nz){
if(A[x,y,z]==1){   #トーラスに含まれる点のみ計算する
	if(U[x,y,z]==0){
	if(sum(U[max(1,x-1):min(Nx,x+1),max(1,y-1):min(Ny,y+1),max(1,z-1):min(Nz,z+1)])>=b+2){tempU[x,y,z]<-1}
	
	}else if(U[x,y,z]>b){
		tempU[x,y,z]<-a
	}else if(U[x,y,z]!=0){
		tempU[x,y,z]<-U[x,y,z]+1
	}
}

}}}
U<-tempU

plot3d(slice.index(U,1),slice.index(U,2),slice.index(U,3),col=rainbow(10)[U*(U>0)+1],alpha=ifelse(A ==0,0,1))
rgl.viewpoint(theta=30,phi=-10)
}