その上に立っている人にとっては平面であって、そこを旅行する人にとっては球面だけれど、外側側から見るとその球面は結ばれている

  • spun-knotというタイプの結び目の作り方
    • まず1-knotを開き、その両端を固定して、その「弧」をぐるりと回して閉じると、それは1-knotを用いた(0-)twist spun knotで2-knotの一種
    • それを作るときに「弧」を1回ぐるりと回すときにひねりをk回入れると1-knotを用いた、k-twist spun knot
    • これより、s-knotを用いて高次化して、(s+1) k-twist spun knot of s-knot というのが作れる
    • その話
  • Trivialな1-結び目(3次元空間にある円周)を次のようなステップで作る
    • 3次元空間で、x\ge 0,y=0なる平面をz軸上にぐるりと回すことで、3次元空間全体を作ることにする
    • 今、x\ge 0,y=0でzは任意な点をとり、z軸上にぐるりと回すとtrivialな1-結び目ができる
trivial.knot.1 <- function(x,z){
	y <- 0
	theta <- seq(from=0,to=1,length=100)*2*pi
	XYZ <- matrix(0,length(theta),3)
	for(i in 1:length(theta)){
		R <- matrix(c(cos(theta[i]),-sin(theta[i]),sin(theta[i]),cos(theta[i])),byrow=TRUE,2,2)
		tmp <- R %*% c(x,y)
		XYZ[i,1:2] <- c(tmp)
		XYZ[i,3] <- z
	}
	XYZ
}
library(rgl)
# x>=0,y=0,z:任意、の点を取り、xy平面をz軸を中心に回転する
x <- runif(1)
z <- rnorm(1)

knot.1 <- trivial.knot.1(x,z)
plot3d(knot.1)
  • Trivialな2-結び目を同様の方法で作ってみる
  • まずは準備
  • 3次元空間でy=0平面にx\ge 0の範囲にx^2+z^2が一定となる点を取ると、それは半円周。これをz軸にぐるりと回せば球面になる
# y=0にx>=0で半円を作る
s <- seq(from=0,to=1,length=20)*pi
x <- sin(s)
z <- cos(s)
# 半円上の点をすべてぐるりと回す
XYZ <- matrix(0,0,3)
for(i in 1:length(s)){
	tmp <- trivial.knot.1(x[i],z[i])
	XYZ <- rbind(XYZ,tmp)
}
plot3d(XYZ)
  • 次に、4次元空間を考える。x\ge0,y=0z,wは任意であるような点をとり、それをzw平面の周りにぐるりと回転させる
trivial.knot.2 <- function(x,z,w,n=100){
	y <- 0
	theta <- seq(from=0,to=1,length=n)*2*pi
	XYZW <- matrix(0,length(theta),4)
	for(i in 1:length(theta)){
		R <- matrix(c(cos(theta[i]),-sin(theta[i]),sin(theta[i]),cos(theta[i])),byrow=TRUE,2,2)
		tmp <- R %*% c(x,y)
		XYZW[i,1:2] <- c(tmp)
		XYZW[i,3] <- z
		XYZW[i,4] <- w
	}
	XYZW
}
  • 結び目のあるものをzw平面で回転させたいので、まずは結び目を作りたい
  • 三葉結び目はこちらで作れる。それをコピーしたのが以下(x,y,z空間で作る。x->x,y->z,z->wと読み変えること)

# 周期は0-(2*pi)をX回繰り返しとする
X<-4
# 1周あたりの点の数をnpt
npt<-100
t<-seq(from=0,to=1,length.out=npt)*2*pi*X
# x,y,zの座標は、直径の周期C1と角の周期C2とで決める
# 2piの間にC1回、C2回繰り返しさせる
#C1とC2の最小公倍数*2piだけ時間が経過すると、「元に戻る」
# C1=C2=0のときは直線
# C1=0,C2!=0のときは円
# C1=C2>0のときはらせん
# C1*2=C2 のときは三葉結び目
# C1*k1=C2*k2 ;k1,k2は異なる自然数 のときは複雑な結び目
# C1とC2に最小公倍数がないと、周回して面をなす

C1<-1
C2<-2
# x,y,zは相互に対等なので、0/3*2pi, 1/3*2pi,2/3*2pi のずれを入れる
# 直径は周期的で (k-1)と(k+1)の間を上下するものとする
# k=1では三葉結び目は結ばれずに1個の集中点をもち
# k<1では結ばれない
# k>1で、結ばれる
k<-2

x<-1/(2*(C1+C2))*sin((C1+C2)*t)+1/(2*(C1-C2))*sin((C1-C2)*t)+k/C2*sin(C2*t)
y<-1/(2*(C1+C2))*sin((C1+C2)*(t+2/3*pi))+1/(2*(C1-C2))*sin((C1-C2)*(t+2/3*pi))+k/C2*sin(C2*(t+2/3*pi))
z<-1/(2*(C1+C2))*sin((C1+C2)*(t+4/3*pi))+1/(2*(C1-C2))*sin((C1-C2)*(t+4/3*pi))+k/C2*sin(C2*(t+4/3*pi))

plot3d(x,y,z,col=rainbow(npt))
  • この結び目を少しxの正の方向にずらして、zw平面に2か所で貫通し、その接着点で張り付ける(x,y,z空間で作る。x->x,y->z,z->wと読み変えること)

x. <- x+ (max(x)-min(x))*0.4
xposi <- which(x.>=0)
x.. <- x.[xposi]
y.. <- y[xposi]
z.. <- z[xposi]
plot3d(x..,y..,z..,col=rainbow(10))
  • さてこのx..=x,y..=z,z..=wの点をzw平面で回そう
x <- x..
z <- y..
w <- z..
XYZW <- matrix(0,0,4)
for(i in 1:length(x)){
	tmp <- trivial.knot.2(x[i],z[i],w[i])
	XYZW <- rbind(XYZW,tmp)
}
  • いくつかの方法で視覚化。その上に立っている人にとっては平面であって、そこを旅行する人にとっては球面だけれど、外側側から見るとその球面は結ばれている、そんな図
plot3d(XYZW[,c(1,2,3)])
plot3d(XYZW[,c(1,2,4)])
plot3d(XYZW[,c(1,3,4)])
plot3d(XYZW[,c(2,3,4)])




matplot(XYZW,type="l")

plot(as.data.frame(XYZW))

  • spun-knotでは両端を固定し1ぐるりすることでその両端を閉じたけれど、k回以上のぐるりで閉じるようにすると、それは(k-1)-twisted spun knotと呼ぶ