クオータニオンのこと quaternion
Quaternion
Qaternionとは
・複素数を拡張した数体系である。
・集合としては、四元数の全体 H は実数体上四次元の数ベクトル空間 R4 に等しい。
・四元数は純粋数学のみならず応用数学、特に3Dグラフィクスやコンピュータビジョンにおいて三次元での回転の計算でも用いられる。
package "onion"
# install.package("onion") library(onion)
DNA molecule (ref 2)をshift & rotateさせる
Shifting
100ずつshift
library(onion) A <- quaternion(Re=0, i=xyz[,1], j=xyz[,2], k=xyz[,3]) u1 <- c(100, 100, 0) # x, yを100ずつ移動するuを作る u1_q <- quaternion(Re=0, i=u1[1], j=u1[2], k=u1[3]) A.shift<-A+u1_q rgl.clear() spheres3d(t(as.matrix(A)[-1,]), radius=base.size, col="black") spheres3d(t(as.matrix(A.shift)[-1,]), radius=base.size, col=base.col[col+1])
ばらばらにshift
#u2<-matrix(runif(100,0,100), 3,100) #u2_q <- quaternion(Re=0, i=u2[1], j=u2[2], k=u2[3]) n<-1 #それぞれの点を各軸に0-1の範囲で乱数用いてshift u2_q<-quaternion(Re=0, i=runif(100,0,n),j=runif(100,0,n),k=runif(100,0,n)) A.shift2<-A+u2_q rgl.clear() spheres3d(t(as.matrix(A)[-1,]), radius=base.size, col="black") spheres3d(t(as.matrix(A.shift2)[-1,]), radius=base.size, col="red")
n<-10 #0-10 u2_q<-quaternion(Re=0, i=runif(100,0,n),j=runif(100,0,n),k=runif(100,0,n)) A.shift2<-A+u2_q rgl.clear() spheres3d(t(as.matrix(A)[-1,]), radius=base.size, col="black") spheres3d(t(as.matrix(A.shift2)[-1,]), radius=base.size, col="red")
n<-100 #0-100 u2_q<-quaternion(Re=0, i=runif(100,0,n),j=runif(100,0,n),k=runif(100,0,n)) A.shift2<-A+u2_q rgl.clear() spheres3d(t(as.matrix(A)[-1,]), radius=base.size, col="black") spheres3d(t(as.matrix(A.shift2)[-1,]), radius=base.size, col="red")
Rotation
pi/6 rotate
library(onion) theta<-pi/6 #回転角 A <- quaternion(Re=0, i=xyz[,1], j=xyz[,2], k=xyz[,3]) u <- c(1, 1, 1)*sin(theta/2) u_q <- quaternion(Re=cos(theta/2), i=u[1], j=u[2], k=u[3]) xyz.rot<-u_q*A*Conj(u_q) rgl.clear() spheres3d(t(as.matrix(A)[-1,]), radius=base.size, col="black") spheres3d(t(as.matrix(xyz.rot)[-1,]), radius=base.size, col=base.col[col+1])
ばらばらにrotate
u3_q <- quaternion(Re=cos(runif(100, 0, pi/2)), i=u[1], j=u[2], k=u[3]) xyz.rot2<-u3_q*A*Conj(u3_q) rgl.clear() spheres3d(t(as.matrix(A)[-1,]), radius=base.size, col="black") spheres3d(t(as.matrix(xyz.rot2)[-1,]), radius=base.size, col="red")
Comments
とある尊敬する方から、学習においては単語(vocaburary)が大切だと言われた。これは、根本について端的に表していると思う。物事を読み解くとき、特に其の分野に対して未知であればあるほど、まずは徹底的に広く勉強し、其の分野で用いられている単語、用いられるコンテクストを理解することが重要だ。それが分かれば、自分から適切な質問をし、適切に答えていくことが出来るようになるだろう。これには相応の努力と、相応の時間を要するが、現代人が培っていかなければならない知識だと思う。
References
- Quaternion (wikipedia). https://en.wikipedia.org/wiki/Quaternion
- DNA2重らせん
http://d.hatena.ne.jp/ryamada22/20131224 - rmarkdownとknitrによる文書作成 http://d.hatena.ne.jp/MikuHatsune/20160708/1467984764
- http://stla.github.io/stlapblog/posts/rgl_knitr.html
- rgl で描いた図の保存 http://cse.naro.affrc.go.jp/takezawa/r-tips/r/57.html