- フルネ=セレの行列は、曲線の曲がり具合をパラメタ表示したもの
- Moving frameの弧長パラメタに関する1次微分
- 曲線の曲がり具合が曲線に沿って「一定」であるとき、なにかしらの行列を使って
- と表すことができる。
- ただしMは回転を表す行列である
- 昨日の記事では、「フルネ=セレ」のMoving frameの増分行列を使って曲線を描いたが、今日は、Moving frameを回転させる行列を使って描こう
- ここでmoving frameの第一ベクトルはその点での点の速度ベクトルであることを使って描く
- そうすると、フルネ=セレで描いたときに「らせん」だったものが、トーラスに(も)なる(4次元以上での軌跡を3次元に投影した時に、ということのようだが)
n<-4
NormalBase<-function(n){
I<-X<-diag(rep(1,n))
thetas<-runif(n*(n-1)/2)*2*pi
T<-matrix(0,n,n)
T[lower.tri(T)]<-thetas
for(i in 1:(n-1)){
for(j in (i+1):n){
R<-I
R[i,i]<-R[j,j]<-cos(T[j,i])
R[i,j]<-sin(T[j,i])
R[j,i]<--R[i,j]
X<-R%*%X
}
}
X
}
Rot<-NormalBase(n)
E.out<-eigen(Rot)
V<-E.out[[2]]
V2<-solve(V)
S<-diag(E.out[[1]])
Niter<-10000
xs<-matrix(0,Niter,n)
xs[1,]<-runif(n)
dt<-0.005
T<-runif(Niter-1)
T<-sort(T)
dhk<-NormalBase(n)
v<-dhk[1,]
for(i in 2:Niter){
xs[i,]<-xs[i-1,]+v*dt
dhk<-(V%*%S^(dt)%*%V2) %*% dhk
v<-dhk[1,]
}
library(rgl)
plot3d(xs[,1],xs[,2],xs[,3],col=rainbow(Niter))
matplot(xs,type="l")
- この場合のmoving frame回転行列は以下であった
Rot
[,1] [,2] [,3] [,4]
[1,] 0.003640657 0.02308859 0.05751062 -0.99807124
[2,] 0.542523942 -0.63809206 -0.54456963 -0.04416122
[3,] -0.062159929 0.61777600 -0.78327751 -0.03106943
[4,] 0.837729468 0.45897523 0.29430051 0.03063146