n次元曲線
- 動標構とフレネ=セレの係数
- 曲線上の点に定める正規直交座標系で以下の条件を満たす
- 曲線上の等速運動(単位時間あたりの移動距離が1であるような運動)を考える
- 動標構の第1方向単位ベクトルは、その点での速度ベクトルとする
- 動標構は曲線上の位置によって(運動について考えれば、時刻によって、等速運動なので、曲線上の距離()によって)異なるから、それを定める方向単位ベクトルも位置によって(時刻によって)異なる
- sは弧長パラメタのこと
- 今、動標構の第1から第i単位ベクトルまでが、定まっているときに、第i+1単位ベクトルを次のように定める
- 第iベクトルの時間微分があるときに、のように、のうち、の線形結合で表される部分とそれ以外に分け、はのすべてと直交するようにとる
- このようにして第nベクトルまでを決定する
- このとき、が動標構である
- ここで、動標構単位ベクトルの直交関係から
- と項が2つ(の場合となる。
- この結果フルネ=セレの行列が対角成分より1行ずつ上下の成分のみを非ゼロとする行列となる
- また、が曲率
- この行列は、動標構(moving frame)の弧長パラメタ1次微分を定めるもの
- 曲線の曲がり具合をn-1段階の階層的パラメタ表示したものである
- Moving frameは曲線上に乗せた正規直交基底なので、その変化は『回転』でもある
- その視点で曲線を描く方法を変えてみよう(明日の記事)
曲率・捩率…
- 作者: 中内伸光
- 出版社/メーカー: 共立出版
- 発売日: 2005/09/15
- メディア: 単行本
- 購入: 2人 クリック: 29回
- この商品を含むブログ (15件) を見る
- 2次元曲線は曲率で定義
- 3次元曲線は曲率と捩率(れいりつ)で定義
- n次元曲線は、曲がりに関するn-1個の変数(第一が曲率、第二が捩率、第三以降は、一般化されたもの)で定義
- n次元の曲がりを表わすn-1個の変数はnxn行列を以下のように作り、それはフルネ=セレの一般次元の公式
- こちら(Wiki)
- フルネ=セレの行列成分が時間に関して(曲線上の位置に関して)一定であれば、それは、らせんになる
# フルネ=セレ n<-5 M<-matrix(0,n,n) c<-runif(n-1) #c<-rep(1,n-1) #c<-1^((n-1):1) #c<-rnorm(n-1) c<-1.1^((n-1):1) for(i in 1:length(c)){ M[i,i+1]<-c[i] M[i+1,i]<--c[i] } #M<-M+diag(rep(1,n)) Niter<-10000 dt<-0.001 xs<-matrix(0,Niter,n) xs[1,]<-runif(n)*10 e.out<-eigen(M) u<-e.out[[2]] v<-solve(u) s<-diag(e.out[[1]]) # どうひょうこうを作る NormalBase<-function(n){ # 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 } dhk<-NormalBase(n) v<-dhk[1,] for(i in 2:Niter){ #xs[i,]<-M%*%xs[1,] xs[i,]<-xs[i-1,]+v*dt #xs[i,]<-(u%*%s^(i*dt)%*%v)%*%xs[1,] #xs[i,]<-(u%*%v^(i*dt)%*%v)%*%xs[1,] #dhk<-(u%*%diag(s^(i*dt))%*%v)%*% dhkInit dhk<-(M %*% dhk ) *dt + dhk # 単位ベクトル補正 ll<-apply(dhk^2,1,sum) dhk<-((dhk)/sqrt(ll)) v<-dhk[1,] #print(sum(v^2)) } library(rgl) plot3d(xs[,1],xs[,2],xs[,3],col=rainbow(Niter)) matplot(xs,type="l")