【幾何学の基礎】立方眼(Cube grid)と四元数(Quaternion)
これから言及する四元数(quaternion)a+bi +cj+dkの世界では、上掲の投稿で紹介した立方眼(Cube Grid)のスケーラビリティー(平方数集めて組み立てると自己相似形となるい)はスカラー(scalar)aに吸収される形となります。なのでi^2=j^2=k^2=ijk=-1の範囲を単に-1から0にかけての格子の話だとイメージすると躓いてしまいます(私自身がエビデンス)。
格子関数(対角線を省略)
library(rgl)
#mo(Minus One),cp(Center Point),po(Plus One)
grid_draw01<-function(m,c,p){
#座標(Coordinate)合成関数Cd
cd<-function(a,b,c){paste0("(",a,",",b,",",c,")")}
#頂点座標=8個
texts3d(m,m,m,texts=cd(m,m,m),col=c(200,200,200),adj=1.0,cex=0.5)
texts3d(p,m,m,texts=cd(p,m,m),col=c(200,200,200),adj=1.0,cex=0.5)
texts3d(m,p,m,texts=cd(m,p,m),col=c(200,200,200),adj=1.0,cex=0.5)
texts3d(p,p,m,texts=cd(p,p,m),col=c(200,200,200),adj=1.0,cex=0.5)
texts3d(m,m,p,texts=cd(m,m,p),col=c(200,200,200),adj=1.0,cex=0.5)
texts3d(p,m,p,texts=cd(p,m,p),col=c(200,200,200),adj=1.0,cex=0.5)
texts3d(m,p,p,texts=cd(m,p,p),col=c(200,200,200),adj=1.0,cex=0.5)
texts3d(p,p,p,texts=cd(p,p,p),col=c(200,200,200),adj=1.0,cex=0.5)
#頂点間中点=1+6+12=19個
texts3d(c,c,c,texts=cd(c,c,c),col=rgb(0,0,0),adj=1.0)
texts3d(m,c,c,texts=cd(m,c,c),col=rgb(0,0,0),adj=1.0)
texts3d(c,m,c,texts=cd(c,m,c),col=rgb(0,0,0),adj=1.0)
texts3d(c,c,m,texts=cd(c,c,m),col=rgb(0,0,0),adj=1.0)
texts3d(p,c,c,texts=cd(p,c,c),col=rgb(0,0,0),adj=1.0)
texts3d(c,p,c,texts=cd(c,p,c),col=rgb(0,0,0),adj=1.0)
texts3d(c,c,p,texts=cd(c,c,p),col=rgb(0,0,0),adj=1.0)
texts3d(c,m,m,texts=cd(c,m,m),col=rgb(0,0,0),adj=1.0)
texts3d(c,m,p,texts=cd(c,m,p),col=rgb(0,0,0),adj=1.0)
texts3d(c,p,m,texts=cd(c,p,m),col=rgb(0,0,0),adj=1.0)
texts3d(c,p,p,texts=cd(c,p,p),col=rgb(0,0,0),adj=1.0)
texts3d(m,c,m,texts=cd(m,c,m),col=rgb(0,0,0),adj=1.0)
texts3d(m,c,p,texts=cd(m,c,p),col=rgb(0,0,0),adj=1.0)
texts3d(p,c,m,texts=cd(p,c,m),col=rgb(0,0,0),adj=1.0)
texts3d(p,c,p,texts=cd(p,c,p),col=rgb(0,0,0),adj=1.0)
texts3d(m,m,c,texts=cd(m,m,c),col=rgb(0,0,0),adj=1.0)
texts3d(m,p,c,texts=cd(m,p,c),col=rgb(0,0,0),adj=1.0)
texts3d(p,m,c,texts=cd(p,m,c),col=rgb(0,0,0),adj=1.0)
texts3d(p,p,c,texts=cd(p,p,c),col=rgb(0,0,0),adj=1.0)
#正六面体(Square)本体=6面lines3d(c(m,p,p,m,m),c(m,m,p,p,m),c(m,m,m,m,m),col=c(200,200,200),lwd=1)
lines3d(c(m,p,p,m,m),c(m,m,p,p,m),c(p,p,p,p,p),col=c(200,200,200),lwd=1)
lines3d(c(m,m),c(m,m),c(m,p),col=c(200,200,200),lwd=1)
lines3d(c(p,p),c(m,m),c(m,p),col=c(200,200,200),lwd=1)
lines3d(c(m,m),c(p,p),c(m,p),col=c(200,200,200),lwd=1)
lines3d(c(p,p),c(p,p),c(m,p),col=c(200,200,200),lwd=1)
#頂点間中線=3+12=15本
lines3d(c(p,m),c(c,c),c(c,c),col=rgb(0,0,0),lwd=1)
lines3d(c(c,c),c(p,m),c(c,c),col=rgb(0,0,0),lwd=1)
lines3d(c(c,c),c(c,c),c(p,m),col=rgb(0,0,0),lwd=1)
lines3d(c(c,c,c,c,c),c(m,p,p,m,m),c(m,m,p,p,m),col=rgb(0,0,0),lwd=1)
lines3d(c(m,p,p,m,m),c(c,c,c,c,c),c(m,m,p,p,m),col=rgb(0,0,0),lwd=1)
lines3d(c(m,p,p,m,m),c(m,m,p,p,m),c(c,c,c,c,c),col=rgb(0,0,0),lwd=1)
}
格子関数の描画
grid_draw01(-1,0,1)
#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="C:/Users/81806/Desktop/Markdown/grid001")
格子上におけるijkの展開範囲(間違ったイメージ)
grid_draw01(-1,0,1)
#正六面体(Square)本体=6面
m<--1
p<-0quads3d(matrix(c(
m,m,m,
m,m,p,
m,p,p,
m,p,m), nrow=4, byrow=T),col=rgb(1,0,0),lwd=1)quads3d(matrix(c(
m,m,m,
m,m,p,
p,m,p,
p,m,m), nrow=4, byrow=T),col=rgb(1,0,0),lwd=1)quads3d(matrix(c(
m,m,m,
m,p,m,
p,p,m,
p,m,m), nrow=4, byrow=T),col=rgb(1,0,0),lwd=1)quads3d(matrix(c(
p,m,m,
p,m,p,
p,p,p,
p,p,m), nrow=4, byrow=T),col=rgb(1,0,0),lwd=1)quads3d(matrix(c(
m,p,m,
m,p,p,
p,p,p,
p,p,m), nrow=4, byrow=T),col=rgb(1,0,0),lwd=1)quads3d(matrix(c(
m,m,p,
m,p,p,
p,p,p,
p,m,p), nrow=4, byrow=T),col=rgb(1,0,0),lwd=1)
#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="C:/Users/81806/Desktop/Markdown/grid002")
i^2=j^2=k^2=-1の不成立。座標(-1,-1,-1)に到達しない。
grid_draw01(-1,0,1)
m=-1
c=0
p=1
lines3d(c(c,m,m),c(c,c,m),c(c,c,c),col=rgb(1,0,0),lwd=3)
lines3d(c(c,c,m),c(c,c,c),c(c,m,m),col=rgb(0,0,1),lwd=3)
lines3d(c(c,c,c),c(c,m,m),c(c,c,m),col=rgb(0,1,0),lwd=3)#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="C:/Users/81806/Desktop/Markdown/grid003")
ijk=-1の成立。座標(-1,-1,-1)に到達。
grid_draw01(-1,0,1)
m=-1
c=0
p=1
lines3d(c(c,m),c(c,c),c(c,c),col=rgb(1,0,0),lwd=3)
lines3d(c(m,m),c(c,m),c(c,c),col=rgb(0,0,1),lwd=3)
lines3d(c(m,m),c(m,m),c(c,m),col=rgb(0,1,0),lwd=3)#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="C:/Users/81806/Desktop/Markdown/grid004")
実は立方体のスケーラビリティー(立法数で増やせば相似形となる)の関係から、この関係を+1から-1にかけての座標に転写しても状態は何も変わりません。まずはi^2=j^2=k^2=-1が成立せず、座標(-1,-1,-1)に到達しない件について。
grid_draw01(-1,0,1)
m=-1
c=0
p=1
lines3d(c(p,m,m),c(p,p,m),c(p,p,p),col=rgb(1,0,0),lwd=3)
lines3d(c(p,p,m),c(p,p,p),c(p,m,m),col=rgb(0,0,1),lwd=3)
lines3d(c(p,p,p),c(p,m,m),c(p,p,m),col=rgb(0,1,0),lwd=3)#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="C:/Users/81806/Desktop/Markdown/grid005")
次いでijk=-1なら成立し、座標(-1,-1,-1)に到達する件について。
grid_draw01(-1,0,1)
m=-1
c=0
p=1
lines3d(c(p,m),c(p,p),c(p,p),col=rgb(1,0,0),lwd=3)
lines3d(c(m,m),c(p,m),c(p,p),col=rgb(0,0,1),lwd=3)
lines3d(c(m,m),c(m,m),c(p,m),col=rgb(0,1,0),lwd=3)#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="C:/Users/81806/Desktop/Markdown/grid006")
要するにij=k,ik=j,jk=iが成立すればi^2=j^2=k^2=-1も成立した事になり、座標(-1,-1,-1)へと到達するのです(右手の法則に従って、ただし符号がマイナスなので逆進して2回曲がる)。
ij=k
grid_draw01(-1,0,1)
m=-1
c=0
p=1
lines3d(c(p,m),c(p,p),c(p,p),col=rgb(1,0,0),lwd=3)
lines3d(c(m,m),c(p,m),c(p,p),col=rgb(0,0,1),lwd=3)
lines3d(c(m,m),c(m,m),c(p,m),col=rgb(0,1,0),lwd=3)
lines3d(c(p,m),c(p,m),c(p,p),col=rgb(0,1,0),lwd=3)#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="C:/Users/81806/Desktop/Markdown/grid007")
ik=j
grid_draw01(-1,0,1)
m=-1
c=0
p=1
lines3d(c(p,m),c(p,p),c(p,p),col=rgb(1,0,0),lwd=3)
lines3d(c(m,m),c(p,p),c(p,m),col=rgb(0,1,0),lwd=3)
lines3d(c(m,m),c(p,m),c(m,m),col=rgb(0,0,1),lwd=3)
lines3d(c(p,m),c(p,p),c(p,m),col=rgb(0,0,1),lwd=3)#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="C:/Users/81806/Desktop/Markdown/grid008")
jk=i
grid_draw01(-1,0,1)
m=-1
c=0
p=1
lines3d(c(p,p),c(p,m),c(p,p),col=rgb(0,0,1),lwd=3)
lines3d(c(p,p),c(m,m),c(p,m),col=rgb(0,1,0),lwd=3)
lines3d(c(p,m),c(m,m),c(m,m),col=rgb(1,0,0),lwd=3)
lines3d(c(p,p),c(p,m),c(p,m),col=rgb(1,0,0),lwd=3)#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="C:/Users/81806/Desktop/Markdown/grid009")
すなわち同時にji=-k,ki=-j,kj=-iが成立します(2回曲がるうち片方が右手の法則に逆らう動きで残りが従う動きとなるので(-1,-1,-1)に到達する為に符号が逆転する)。実はこれこそが外積(Outer product)概念の大源流なのです。
ji=-k
grid_draw01(-1,0,1)
m=-1
c=0
p=1
lines3d(c(p,p),c(p,m),c(p,p),col=rgb(0,0,1),lwd=3)
lines3d(c(p,m),c(m,m),c(p,p),col=rgb(1,0,0),lwd=3)
lines3d(c(m,m),c(m,m),c(p,m),col=rgb(0,1,0),lwd=3)
lines3d(c(p,m),c(p,m),c(p,p),col=rgb(0,1,0),lwd=3)#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="C:/Users/81806/Desktop/Markdown/grid010")
ki=-j
grid_draw01(-1,0,1)
m=-1
c=0
p=1
lines3d(c(p,p),c(p,p),c(p,m),col=rgb(0,1,0),lwd=3)
lines3d(c(p,p),c(p,m),c(m,m),col=rgb(1,0,0),lwd=3)
lines3d(c(p,m),c(m,m),c(m,m),col=rgb(0,0,1),lwd=3)
lines3d(c(p,p),c(p,m),c(p,m),col=rgb(0,0,1),lwd=3)#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="C:/Users/81806/Desktop/Markdown/grid011")
kj=-i
grid_draw01(-1,0,1)
m=-1
c=0
p=1
lines3d(c(p,p),c(p,p),c(p,m),col=rgb(0,1,0),lwd=3)
lines3d(c(p,p),c(p,m),c(m,m),col=rgb(0,0,1),lwd=3)
lines3d(c(p,m),c(m,m),c(m,m),col=rgb(1,0,0),lwd=3)
lines3d(c(p,p),c(p,m),c(p,m),col=rgb(1,0,0),lwd=3)#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="C:/Users/81806/Desktop/Markdown/grid012")
所謂「四元数の乗算表」は、こうした考え方に由来するのですが、いかんせん数字があってません(1と1ではなく1とsqrt(2))。
統計言語Rによる作表例
#三角比(Triangle Ratio)一覧
ijk<-c("-1","k","-j")
jki<-c("-k","-1","i")
kij<-c("j","-i","-1")
TR01<- data.frame(i=ijk,j=jki,k=kij)colnames(TR01)<-c("i","j","k")
rownames(TR01)<-c("i","j","k")
library(xtable)
print(xtable(TR01),type="html")
i | j | k | |
---|---|---|---|
i | -1 | -k | j |
j | k | -1 | -i |
k | -j | i | -1 |
さて、四元数(quaternion)の考案者ハミルトン(William Rowan Hamilton、1805年~1865年)は、こうした壁をどうやって乗り越えたのでしょうか? 以下続報…