【オイラーの多面体定理と正多面体】正方形における平方対角線(Square diagonal)と立方体における立方対角線(Cubic diagonal)の関係について。

[【Rで球面幾何学】単位円と単位球①「半径１」と「直径２」の関係について。](https://qiita.com/ochimusha01/items/d5d3d7a8fda03eddb1d8)
>**真円の円弧**(<font color="blue">Circular Arc of True Circle</font>)/**真球の表面**(<font color="blue">Sphere Surface of True Sphere</font>)上においては任意の**原蹠**(<font color="blue">Portal</font>)と**対蹠**(<font color="blue">Antipodal</font>)を結ぶ直線距離、すなわち**直径**(<font color="blue">Diameter)</font>)が全て等しくなる。

そしてその円弧/球面上の直径は、これに内接する正方形の**平方対角線**(<font color="blue">Square diagonal</font>)/立方体の**立方対角線**(<font color="blue">Cubic diagonal</font>)と一致するのです。

①まずは1辺を1と置く**N次元方眼**(<font color="blue">n-grid</font>)上に直径２の単位球面に内接する、すなわち立方対角線の長さが２の立方体を作図する。ここではZ軸を計算の基準に選んだが、X軸やY軸を選んでも同じ結果となるのは言うまでもない。
![68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303230313132312f32303230313132313232323434382e676966.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/1318d9a8-7928-4e81-123b-2ec8f215b078.gif)


```R
library(rgl)

#原蹠(PorTal)
portal_i<-0
portal_j<-0
portal_k<-1
portal_text=paste0("PT(",portal_i,",",portal_j,",",portal_k,")")

#原蹠表示
texts3d(portal_i,portal_j,portal_k,texts=portal_text,col=rgb(0,0,0),adj=1.0)

#対蹠(AntiPordal)
antipordal_i<-0
antipordal_j<-0
antipordal_k<--1
antipordal_text=paste0("AP(",antipordal_i,",",antipordal_j,",",antipordal_k,")")

#対蹠表示
texts3d(antipordal_i,antipordal_j,antipordal_k,texts=antipordal_text,col=rgb(0,0,0),adj=1.0)

#立方対角線(Cubic Diagonal)
lines3d(c(portal_i,antipordal_i),c(portal_j,antipordal_j),c(portal_k,antipordal_k),col=rgb(1,0,0),lwd=2)

#立方体におけるxy軸上の経度(LoNgitude)座標
LN0=sin(pi/3)
c0<-seq(0,2*pi,length=4)
LN01_cos<-cos(c0)*LN0
LN01_sin<-sin(c0)*LN0
LN02_cos<-cos(c0+pi)*LN0
LN02_sin<-sin(c0+pi)*LN0

#立方体におけるz軸上の緯度(LaTitude)座標
LT0=1/3
AP01=LT0
AP02=-LT0

#立方体描写(原蹠から最初の隣点)
lines3d(c(portal_i,LN01_cos[1]),c(portal_j,LN01_sin[1]),c(portal_k,AP01),col=rgb(0,0,0),lwd=1)
lines3d(c(portal_i,LN01_cos[2]),c(portal_j,LN01_sin[2]),c(portal_k,AP01),col=rgb(0,0,0),lwd=1)
lines3d(c(portal_i,LN01_cos[3]),c(portal_j,LN01_sin[3]),c(portal_k,AP01),col=rgb(0,0,0),lwd=1)

#立方体描写(原蹠から最初の隣点)
lines3d(c(antipordal_i,LN02_cos[1]),c(antipordal_j,LN02_sin[1]),c(antipordal_k,AP02),col=rgb(0,0,0),lwd=1)
lines3d(c(antipordal_i,LN02_cos[2]),c(antipordal_j,LN02_sin[2]),c(antipordal_k,AP02),col=rgb(0,0,0),lwd=1)
lines3d(c(antipordal_i,LN02_cos[3]),c(antipordal_j,LN02_sin[3]),c(antipordal_k,AP02),col=rgb(0,0,0),lwd=1)

#立方体描写(中線の結合)
lines3d(c(LN01_cos[1],LN02_cos[3],LN01_cos[2],LN02_cos[1],LN01_cos[3],LN02_cos[2],LN01_cos[1]),c(LN01_sin[1],LN02_sin[3],LN01_sin[2],LN02_sin[1],LN01_sin[3],LN02_sin[2],LN01_sin[1]),c(AP01,AP02,AP01,AP02,AP01,AP02,AP01),col=rgb(0,0,0),lwd=1)

#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="~/Desktop/square002")
```
ちなみ立方体には立方体角線=対蹠のセットが他に３個あり、どれを選んでも同じ結果となります。
![68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303230313132312f32303230313132313232333032322e676966.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/e38abbe0-9141-4925-7de2-9faaf73d7db9.gif)


```R
library(rgl)

#原蹠(PorTal)
portal_i<-0
portal_j<-0
portal_k<-1
portal_text=paste0("PT(",portal_i,",",portal_j,",",portal_k,")")

#原蹠表示
texts3d(portal_i,portal_j,portal_k,texts=portal_text,col=rgb(0,0,0),adj=1.0)

#対蹠(AntiPordal)
antipordal_i<-0
antipordal_j<-0
antipordal_k<--1
antipordal_text=paste0("AP(",antipordal_i,",",antipordal_j,",",antipordal_k,")")

#対蹠表示
texts3d(antipordal_i,antipordal_j,antipordal_k,texts=antipordal_text,col=rgb(0,0,0),adj=1.0)

#立方対角線(Cubic Diagonal)
lines3d(c(portal_i,antipordal_i),c(portal_j,antipordal_j),c(portal_k,antipordal_k),col=rgb(1,0,0),lwd=2)

#立方体におけるxy軸上の経度(LoNgitude)座標
LN0=sin(pi/3)
c0<-seq(0,2*pi,length=4)
LN01_cos<-cos(c0)*LN0
LN01_sin<-sin(c0)*LN0
LN02_cos<-cos(c0+pi)*LN0
LN02_sin<-sin(c0+pi)*LN0

#立方体におけるz軸上の緯度(LaTitude)座標
LT0=1/3
AP01=LT0
AP02=-LT0

#立方体描写(原蹠から最初の隣点)
lines3d(c(portal_i,LN01_cos[1]),c(portal_j,LN01_sin[1]),c(portal_k,AP01),col=rgb(0,0,0),lwd=1)
lines3d(c(portal_i,LN01_cos[2]),c(portal_j,LN01_sin[2]),c(portal_k,AP01),col=rgb(0,0,0),lwd=1)
lines3d(c(portal_i,LN01_cos[3]),c(portal_j,LN01_sin[3]),c(portal_k,AP01),col=rgb(0,0,0),lwd=1)

#立方体描写(対蹠から最初の隣点)
lines3d(c(antipordal_i,LN02_cos[1]),c(antipordal_j,LN02_sin[1]),c(antipordal_k,AP02),col=rgb(0,0,0),lwd=1)
lines3d(c(antipordal_i,LN02_cos[2]),c(antipordal_j,LN02_sin[2]),c(antipordal_k,AP02),col=rgb(0,0,0),lwd=1)
lines3d(c(antipordal_i,LN02_cos[3]),c(antipordal_j,LN02_sin[3]),c(antipordal_k,AP02),col=rgb(0,0,0),lwd=1)

#立方体描写(中線の結合)
lines3d(c(LN01_cos[1],LN02_cos[3],LN01_cos[2],LN02_cos[1],LN01_cos[3],LN02_cos[2],LN01_cos[1]),c(LN01_sin[1],LN02_sin[3],LN01_sin[2],LN02_sin[1],LN01_sin[3],LN02_sin[2],LN01_sin[1]),c(AP01,AP02,AP01,AP02,AP01,AP02,AP01),col=rgb(0,0,0),lwd=1)

#追加立方対角線
lines3d(c(LN01_cos[1],LN02_cos[1]),c(LN01_sin[1],LN02_sin[1]),c(AP01,AP02),col=rgb(0,1,0),lwd=1)
lines3d(c(LN01_cos[2],LN02_cos[2]),c(LN01_sin[2],LN02_sin[2]),c(AP01,AP02),col=rgb(0,1,0),lwd=1)
lines3d(c(LN01_cos[3],LN02_cos[3]),c(LN01_sin[3],LN02_sin[3]),c(AP01,AP02),col=rgb(0,1,0),lwd=1)

#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="~/Desktop/square004")
```

②次に**ピタゴラスの定理**(<font color="blue">Pythagorean theorem</font>)の平方展開形<font color="green">sqrt(x^2+y^2)=1</font>を用いて原蹠から出発する3枚の正方形の平方対角線を求めると、その立方体の表面に「**<font color="blue">三辺比1:1:sqrt(2)の二等辺直角三角形</font>**」が３枚現れる。その角度比は<font color="green">45度(π/8ラジアン):45度(π/8ラジアン):90度(π/4ラジアン)</font>。
![68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303230313132312f32303230313132313232333934372e676966.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/47aacf0a-83dc-bc92-a43e-42d0ff6a3916.gif)

```R
library(rgl)

#原蹠(PorTal)
portal_i<-0
portal_j<-0
portal_k<-1
portal_text=paste0("PT(",portal_i,",",portal_j,",",portal_k,")")

#原蹠表示
texts3d(portal_i,portal_j,portal_k,texts=portal_text,col=rgb(0,0,0),adj=1.0)

#対蹠(AntiPordal)
antipordal_i<-0
antipordal_j<-0
antipordal_k<--1
antipordal_text=paste0("AP(",antipordal_i,",",antipordal_j,",",antipordal_k,")")

#対蹠表示
texts3d(antipordal_i,antipordal_j,antipordal_k,texts=antipordal_text,col=rgb(0,0,0),adj=1.0)

#立方対角線(Cubic Diagonal)
lines3d(c(portal_i,antipordal_i),c(portal_j,antipordal_j),c(portal_k,antipordal_k),col=rgb(1,0,0),lwd=2)

#立方体におけるxy軸上の経度(LoNgitude)座標
LN0=sin(pi/3)
c0<-seq(0,2*pi,length=4)
LN01_cos<-cos(c0)*LN0
LN01_sin<-sin(c0)*LN0
LN02_cos<-cos(c0+pi)*LN0
LN02_sin<-sin(c0+pi)*LN0

#立方体におけるz軸上の緯度(LaTitude)座標
LT0=1/3
AP01=LT0
AP02=-LT0

#立方体描写(原蹠から最初の隣点)
lines3d(c(portal_i,LN01_cos[1]),c(portal_j,LN01_sin[1]),c(portal_k,AP01),col=rgb(0,0,0),lwd=1)
lines3d(c(portal_i,LN01_cos[2]),c(portal_j,LN01_sin[2]),c(portal_k,AP01),col=rgb(0,0,0),lwd=1)
lines3d(c(portal_i,LN01_cos[3]),c(portal_j,LN01_sin[3]),c(portal_k,AP01),col=rgb(0,0,0),lwd=1)

#立方体描写(原蹠から最初の隣点)
lines3d(c(antipordal_i,LN02_cos[1]),c(antipordal_j,LN02_sin[1]),c(antipordal_k,AP02),col=rgb(0,0,0),lwd=1)
lines3d(c(antipordal_i,LN02_cos[2]),c(antipordal_j,LN02_sin[2]),c(antipordal_k,AP02),col=rgb(0,0,0),lwd=1)
lines3d(c(antipordal_i,LN02_cos[3]),c(antipordal_j,LN02_sin[3]),c(antipordal_k,AP02),col=rgb(0,0,0),lwd=1)

#立方体描写(中線の結合)
lines3d(c(LN01_cos[1],LN02_cos[3],LN01_cos[2],LN02_cos[1],LN01_cos[3],LN02_cos[2],LN01_cos[1]),c(LN01_sin[1],LN02_sin[3],LN01_sin[2],LN02_sin[1],LN01_sin[3],LN02_sin[2],LN01_sin[1]),c(AP01,AP02,AP01,AP02,AP01,AP02,AP01),col=rgb(0,0,0),lwd=1)

#平方対角線を斜線として備える二等辺三角形(１枚目)
x1<-c(portal_i, LN01_cos[1], LN02_cos[2])
y1<-c(portal_j, LN01_sin[1], LN02_sin[2])
z1<-c(portal_k,AP01,AP02)
triangles3d(x1,y1,z1,color=rgb(0,0,1))

#平方対角線を斜線として備える二等辺三角形(2枚目)
x1<-c(portal_i, LN01_cos[2], LN02_cos[3])
y1<-c(portal_j, LN01_sin[2], LN02_sin[3])
z1<-c(portal_k,AP01,AP02)
triangles3d(x1,y1,z1,color=rgb(0,0,1))

#平方対角線を斜線として備える二等辺三角形(3枚目)
x1<-c(portal_i, LN01_cos[3], LN02_cos[1])
y1<-c(portal_j, LN01_sin[3], LN02_sin[1])
z1<-c(portal_k,AP01,AP02)
triangles3d(x1,y1,z1,color=rgb(0,0,1))

#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="~/Desktop/square005")
```

③こうして求めた立方体の表面上の正方形の平方対角線と対蹠に到達する残り１辺の間にさらに**ピタゴラスの定理**(<font color="blue">Pythagorean theorem</font>)の平方展開形<font color="green">sqrt(x^2+y^2)=1</font>を用いて正方形の平方対角線を算出すると、今度は「**<font color="red">三辺比1:sqrt(2):sqrt(3)の直角三角形</font>**」がさらに３枚現れる。
![68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303230313132312f32303230313132313232343732382e676966.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/fb5d5686-69e8-d34f-a4ae-764f33975d3d.gif)

```R
library(rgl)

#原蹠(PorTal)
portal_i<-0
portal_j<-0
portal_k<-1
portal_text=paste0("PT(",portal_i,",",portal_j,",",portal_k,")")

#原蹠表示
texts3d(portal_i,portal_j,portal_k,texts=portal_text,col=rgb(0,0,0),adj=1.0)

#対蹠(AntiPordal)
antipordal_i<-0
antipordal_j<-0
antipordal_k<--1
antipordal_text=paste0("AP(",antipordal_i,",",antipordal_j,",",antipordal_k,")")

#対蹠表示
texts3d(antipordal_i,antipordal_j,antipordal_k,texts=antipordal_text,col=rgb(0,0,0),adj=1.0)

#立方対角線(Cubic Diagonal)
lines3d(c(portal_i,antipordal_i),c(portal_j,antipordal_j),c(portal_k,antipordal_k),col=rgb(1,0,0),lwd=2)

#立方体におけるxy軸上の経度(LoNgitude)座標
LN0=sin(pi/3)
c0<-seq(0,2*pi,length=4)
LN01_cos<-cos(c0)*LN0
LN01_sin<-sin(c0)*LN0
LN02_cos<-cos(c0+pi)*LN0
LN02_sin<-sin(c0+pi)*LN0

#立方体におけるz軸上の緯度(LaTitude)座標
LT0=1/3
AP01=LT0
AP02=-LT0

#立方体描写(原蹠から最初の隣点)
lines3d(c(portal_i,LN01_cos[1]),c(portal_j,LN01_sin[1]),c(portal_k,AP01),col=rgb(0,0,0),lwd=1)
lines3d(c(portal_i,LN01_cos[2]),c(portal_j,LN01_sin[2]),c(portal_k,AP01),col=rgb(0,0,0),lwd=1)
lines3d(c(portal_i,LN01_cos[3]),c(portal_j,LN01_sin[3]),c(portal_k,AP01),col=rgb(0,0,0),lwd=1)

#立方体描写(原蹠から最初の隣点)
lines3d(c(antipordal_i,LN02_cos[1]),c(antipordal_j,LN02_sin[1]),c(antipordal_k,AP02),col=rgb(0,0,0),lwd=1)
lines3d(c(antipordal_i,LN02_cos[2]),c(antipordal_j,LN02_sin[2]),c(antipordal_k,AP02),col=rgb(0,0,0),lwd=1)
lines3d(c(antipordal_i,LN02_cos[3]),c(antipordal_j,LN02_sin[3]),c(antipordal_k,AP02),col=rgb(0,0,0),lwd=1)

#立方体描写(中線の結合)
lines3d(c(LN01_cos[1],LN02_cos[3],LN01_cos[2],LN02_cos[1],LN01_cos[3],LN02_cos[2],LN01_cos[1]),c(LN01_sin[1],LN02_sin[3],LN01_sin[2],LN02_sin[1],LN01_sin[3],LN02_sin[2],LN01_sin[1]),c(AP01,AP02,AP01,AP02,AP01,AP02,AP01),col=rgb(0,0,0),lwd=1)

#平方対角線を斜線として備える二等辺三角形(1枚目)
x1<-c(portal_i, LN01_cos[1], LN02_cos[2])
y1<-c(portal_j, LN01_sin[1], LN02_sin[2])
z1<-c(portal_k,AP01,AP02)
triangles3d(x1,y1,z1,color=rgb(0,0,1))

#平方対角線を斜線として備える二等辺三角形(2枚目)
x1<-c(portal_i, LN01_cos[2], LN02_cos[3])
y1<-c(portal_j, LN01_sin[2], LN02_sin[3])
z1<-c(portal_k,AP01,AP02)
triangles3d(x1,y1,z1,color=rgb(0,0,1))

#平方対角線を斜線として備える二等辺三角形(3枚目)
x1<-c(portal_i, LN01_cos[3], LN02_cos[1])
y1<-c(portal_j, LN01_sin[3], LN02_sin[1])
z1<-c(portal_k,AP01,AP02)
triangles3d(x1,y1,z1,color=rgb(0,0,1))

#立方対角線を斜線として備える直角三角形（１枚目）
x2<-c(portal_i, LN02_cos[2],antipordal_i)
y2<-c(portal_j, LN02_sin[2],antipordal_j)
z2<-c(portal_k, AP02, antipordal_k)
triangles3d(x2,y2,z2,color=rgb(1,0,0))

#立方対角線を斜線として備える直角三角形（２枚目）
x2<-c(portal_i, LN02_cos[3],antipordal_i)
y2<-c(portal_j, LN02_sin[3],antipordal_j)
z2<-c(portal_k, AP02, antipordal_k)
triangles3d(x2,y2,z2,color=rgb(1,0,0))

#立方対角線を斜線として備える直角三角形（３枚目）
x2<-c(portal_i, LN02_cos[1],antipordal_i)
y2<-c(portal_j, LN02_sin[1],antipordal_j)
z2<-c(portal_k, AP02, antipordal_k)
triangles3d(x2,y2,z2,color=rgb(1,0,0))

#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="~/Desktop/square006")
```
④ちなみに「**<font color="blue">三辺比1:1:sqrt(2)の二等辺直角三角形</font>**」と「**<font color="red">三辺比1:sqrt(2):sqrt(3)の直角三角形</font>**」を検出する順番は逆でも構わないが、この操作をプログラムで実装するに当たっては「**出発点としての原蹠**」と「**到達点としての対蹠**」の設定(<font color="blue">この場合、Z軸を巡る操作</font>)に可換性が存在しない点に注意を払わねばならない。
![68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303230313132312f32303230313132313232353835392e676966.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/599dcaa0-736e-5d69-b8d7-68bdc92f11d5.gif)

```R
library(rgl)

#原蹠(PorTal)
portal_i<-0
portal_j<-0
portal_k<-1
portal_text=paste0("PT(",portal_i,",",portal_j,",",portal_k,")")

#原蹠表示
texts3d(portal_i,portal_j,portal_k,texts=portal_text,col=rgb(0,0,0),adj=1.0)

#対蹠(AntiPordal)
antipordal_i<-0
antipordal_j<-0
antipordal_k<--1
antipordal_text=paste0("AP(",antipordal_i,",",antipordal_j,",",antipordal_k,")")

#対蹠表示
texts3d(antipordal_i,antipordal_j,antipordal_k,texts=antipordal_text,col=rgb(0,0,0),adj=1.0)

#立方対角線(Cubic Diagonal)
lines3d(c(portal_i,antipordal_i),c(portal_j,antipordal_j),c(portal_k,antipordal_k),col=rgb(1,0,0),lwd=2)

#立方体におけるxy軸上の経度(LoNgitude)座標
LN0=sin(pi/3)
c0<-seq(0,2*pi,length=4)
LN01_cos<-cos(c0)*LN0
LN01_sin<-sin(c0)*LN0
LN02_cos<-cos(c0+pi)*LN0
LN02_sin<-sin(c0+pi)*LN0

#立方体におけるz軸上の緯度(LaTitude)座標
LT0=1/3
AP01=LT0
AP02=-LT0

#立方体描写(原蹠から最初の隣点)
lines3d(c(portal_i,LN01_cos[1]),c(portal_j,LN01_sin[1]),c(portal_k,AP01),col=rgb(0,0,0),lwd=1)
lines3d(c(portal_i,LN01_cos[2]),c(portal_j,LN01_sin[2]),c(portal_k,AP01),col=rgb(0,0,0),lwd=1)
lines3d(c(portal_i,LN01_cos[3]),c(portal_j,LN01_sin[3]),c(portal_k,AP01),col=rgb(0,0,0),lwd=1)

#立方体描写(原蹠から最初の隣点)
lines3d(c(antipordal_i,LN02_cos[1]),c(antipordal_j,LN02_sin[1]),c(antipordal_k,AP02),col=rgb(0,0,0),lwd=1)
lines3d(c(antipordal_i,LN02_cos[2]),c(antipordal_j,LN02_sin[2]),c(antipordal_k,AP02),col=rgb(0,0,0),lwd=1)
lines3d(c(antipordal_i,LN02_cos[3]),c(antipordal_j,LN02_sin[3]),c(antipordal_k,AP02),col=rgb(0,0,0),lwd=1)

#立方体描写(中線の結合)
lines3d(c(LN01_cos[1],LN02_cos[3],LN01_cos[2],LN02_cos[1],LN01_cos[3],LN02_cos[2],LN01_cos[1]),c(LN01_sin[1],LN02_sin[3],LN01_sin[2],LN02_sin[1],LN01_sin[3],LN02_sin[2],LN01_sin[1]),c(AP01,AP02,AP01,AP02,AP01,AP02,AP01),col=rgb(0,0,0),lwd=1)

#立方対角線を斜線として備える直角三角形（１枚目）
x2<-c(portal_i, LN01_cos[2],antipordal_i)
y2<-c(portal_j, LN01_sin[2],antipordal_j)
z2<-c(portal_k, AP01, antipordal_k)
triangles3d(x2,y2,z2,color=rgb(1,0,0))

#立方対角線を斜線として備える直角三角形（２枚目）
x2<-c(portal_i, LN01_cos[3],antipordal_i)
y2<-c(portal_j, LN01_sin[3],antipordal_j)
z2<-c(portal_k, AP01, antipordal_k)
triangles3d(x2,y2,z2,color=rgb(1,0,0))

#立方対角線を斜線として備える直角三角形（３枚目）
x2<-c(portal_i, LN01_cos[1],antipordal_i)
y2<-c(portal_j, LN01_sin[1],antipordal_j)
z2<-c(portal_k, AP01, antipordal_k)
triangles3d(x2,y2,z2,color=rgb(1,0,0))

#平方対角線を斜線として備える二等辺三角形(1枚目)
x1<-c(antipordal_i, LN02_cos[1], LN01_cos[2])
y1<-c(antipordal_j, LN02_sin[1], LN01_sin[2])
z1<-c(antipordal_k, AP02, AP01)
triangles3d(x1,y1,z1,color=rgb(0,0,1))

#平方対角線を斜線として備える二等辺三角形(2枚目)
x1<-c(antipordal_i, LN02_cos[2], LN01_cos[3])
y1<-c(antipordal_j, LN02_sin[2], LN01_sin[3])
z1<-c(antipordal_k, AP02, AP01)
triangles3d(x1,y1,z1,color=rgb(0,0,1))

#平方対角線を斜線として備える二等辺三角形(3枚目)
x1<-c(antipordal_i, LN02_cos[3], LN01_cos[1])
y1<-c(antipordal_j, LN02_sin[3], LN01_sin[1])
z1<-c(antipordal_k,AP02,AP01)
triangles3d(x1,y1,z1,color=rgb(0,0,1))

#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="~/Desktop/square008")
```
⑤さらに「**<font color="blue">三辺比1:1:sqrt(2)の二等辺直角三角形</font>**」と「**<font color="red">三辺比1:sqrt(2):sqrt(3)の直角三角形</font>**」を検出する向きを逆にしても構わないが、この操作をプログラムで実装するに当たっては「**各三角形を検出する順序**」の設定(<font color="blue">この場合、X-Y面を巡る操作</font>)に可換性が存在しない点に注意を払わねばならない。
![image.gif](https://cdn-ak.f.st-hatena.com/images/fotolife/o/ochimusha01/20201121/20201121230355.gif)
![68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303230313132312f32303230313132313233303335352e676966.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/47170a55-65f0-b231-041b-f2343369b924.gif)

```R
library(rgl)

#原蹠(PorTal)
portal_i<-0
portal_j<-0
portal_k<-1
portal_text=paste0("PT(",portal_i,",",portal_j,",",portal_k,")")

#原蹠表示
texts3d(portal_i,portal_j,portal_k,texts=portal_text,col=rgb(0,0,0),adj=1.0)

#対蹠(AntiPordal)
antipordal_i<-0
antipordal_j<-0
antipordal_k<--1
antipordal_text=paste0("AP(",antipordal_i,",",antipordal_j,",",antipordal_k,")")

#対蹠表示
texts3d(antipordal_i,antipordal_j,antipordal_k,texts=antipordal_text,col=rgb(0,0,0),adj=1.0)

#立方対角線(Cubic Diagonal)
lines3d(c(portal_i,antipordal_i),c(portal_j,antipordal_j),c(portal_k,antipordal_k),col=rgb(1,0,0),lwd=2)

#立方体におけるxy軸上の経度(LoNgitude)座標
LN0=sin(pi/3)
c0<-seq(0,2*pi,length=4)
LN01_cos<-cos(c0)*LN0
LN01_sin<-sin(c0)*LN0
LN02_cos<-cos(c0+pi)*LN0
LN02_sin<-sin(c0+pi)*LN0

#立方体におけるz軸上の緯度(LaTitude)座標
LT0=1/3
AP01=LT0
AP02=-LT0

#立方体描写(原蹠から最初の隣点)
lines3d(c(portal_i,LN01_cos[1]),c(portal_j,LN01_sin[1]),c(portal_k,AP01),col=rgb(0,0,0),lwd=1)
lines3d(c(portal_i,LN01_cos[2]),c(portal_j,LN01_sin[2]),c(portal_k,AP01),col=rgb(0,0,0),lwd=1)
lines3d(c(portal_i,LN01_cos[3]),c(portal_j,LN01_sin[3]),c(portal_k,AP01),col=rgb(0,0,0),lwd=1)

#立方体描写(原蹠から最初の隣点)
lines3d(c(antipordal_i,LN02_cos[1]),c(antipordal_j,LN02_sin[1]),c(antipordal_k,AP02),col=rgb(0,0,0),lwd=1)
lines3d(c(antipordal_i,LN02_cos[2]),c(antipordal_j,LN02_sin[2]),c(antipordal_k,AP02),col=rgb(0,0,0),lwd=1)
lines3d(c(antipordal_i,LN02_cos[3]),c(antipordal_j,LN02_sin[3]),c(antipordal_k,AP02),col=rgb(0,0,0),lwd=1)

#立方体描写(中線の結合)
lines3d(c(LN01_cos[1],LN02_cos[3],LN01_cos[2],LN02_cos[1],LN01_cos[3],LN02_cos[2],LN01_cos[1]),c(LN01_sin[1],LN02_sin[3],LN01_sin[2],LN02_sin[1],LN01_sin[3],LN02_sin[2],LN01_sin[1]),c(AP01,AP02,AP01,AP02,AP01,AP02,AP01),col=rgb(0,0,0),lwd=1)

#平方対角線を斜線として備える二等辺三角形(1枚目)
x1<-c(portal_i, LN01_cos[2], LN02_cos[1])
y1<-c(portal_j, LN01_sin[2], LN02_sin[1])
z1<-c(portal_k,AP01,AP02)
triangles3d(x1,y1,z1,color=rgb(0,0,1))

#平方対角線を斜線として備える二等辺三角形(2枚目)
x1<-c(portal_i, LN01_cos[3], LN02_cos[2])
y1<-c(portal_j, LN01_sin[3], LN02_sin[2])
z1<-c(portal_k,AP01,AP02)
triangles3d(x1,y1,z1,color=rgb(0,0,1))

#平方対角線を斜線として備える二等辺三角形(3枚目)
x1<-c(portal_i, LN01_cos[1], LN02_cos[3])
y1<-c(portal_j, LN01_sin[1], LN02_sin[3])
z1<-c(portal_k,AP01,AP02)
triangles3d(x1,y1,z1,color=rgb(0,0,1))

#立方対角線を斜線として備える直角三角形（１枚目）
x2<-c(portal_i, LN02_cos[3],antipordal_i)
y2<-c(portal_j, LN02_sin[3],antipordal_j)
z2<-c(portal_k, AP02, antipordal_k)
triangles3d(x2,y2,z2,color=rgb(1,0,0))

#立方対角線を斜線として備える直角三角形（２枚目）
x2<-c(portal_i, LN02_cos[2],antipordal_i)
y2<-c(portal_j, LN02_sin[2],antipordal_j)
z2<-c(portal_k, AP02, antipordal_k)
triangles3d(x2,y2,z2,color=rgb(1,0,0))

#立方対角線を斜線として備える直角三角形（３枚目）
x2<-c(portal_i, LN02_cos[1],antipordal_i)
y2<-c(portal_j, LN02_sin[1],antipordal_j)
z2<-c(portal_k, AP02, antipordal_k)
triangles3d(x2,y2,z2,color=rgb(1,0,0))

#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="~/Desktop/square009")
```
⑥「**球内を２回直角に曲がって原蹠と対蹠を結ぶ**」内接立方体の**空間操作**(<font color="blue">Spatial operations, 原蹠と対蹠の設置はX軸、Y軸、Z軸全てで可換</font>)では「**<font color="blue">三辺比1:1:sqrt(2)の二等辺直角三角形</font>**」と「**<font color="red">三辺比1:sqrt(2):sqrt(3)の直角三角形</font>**」を検出する順番において原蹠と対蹠の可換性が存在しないのは、それが**奇数系**(<font color="blue">Odd=2n+1 System</font>)に分類される**三次元操作系**(<font color="blue">3D operation system</font>)だからで操作が２回あるから。「**円内を1回直角に曲がって原蹠と対蹠を結ぶ**」**偶数系**(<font color="blue">Even=2N System</font>)に分類される**二次元操作系**(<font color="blue">2D operation system</font>)においては操作が１回しか存在せず、この問題は発生しない。
[【Rで球面幾何学】「半円しか描けなかった」世界の思い出？](https://qiita.com/ochimusha01/items/cf74b1fff650edb0a496)
![CFD01.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/0ba98cbe-b449-9b1d-b0f0-4a6b60e55f35.gif)

⑦また内接立方体の空間操作において「**各三角形を検出する順序**」の設定(<font color="blue">原蹠と対蹠をZ軸に設定した場合のX-Y面を巡る操作、原蹠と対蹠をX軸に設定した場合のY-Z面を巡る操作、原蹠と対蹠をY軸に設定した場合のX-Z面を巡る操作</font>)に可換性が存在しないのは、このプログラムが対象円に内接する正多角形の各頂点の座標計算にガウスが発見した「**1の冪根の巡回性**」を用いているからである。これは「**球内を1回も曲がらず直線で原蹠と対蹠を結ぶ**」**一次元操作系**(<font color="blue">1D operation system</font>)に分類されるが、かかる次元においては「**符号の向きが存在しない**」**奇数系**(<font color="blue">Odd=2n+1 System</font>)と「**符号の向きが存在する**」**偶数系**(<font color="blue">Even System</font>)が併存し、後者の制約を受けるので、符号の向きが逆になると、結果も逆になる。
[1の冪根 - Wikipedia](https://ja.wikipedia.org/wiki/1%E3%81%AE%E5%86%AA%E6%A0%B9)
[【Rで球面幾何学】等差数列(算術数列)②数直線(Number Line)概念から同心円集合(Concentric Set)概念へ](https://qiita.com/ochimusha01/items/2a16c3cba3f88986c767)
<font color="green">一次元操作系における「奇数系」の振る舞い</font>
![20200109155657.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/75d73c90-9af4-26aa-b976-65065d64f546.gif)
<font color="green">一次元操作系における「偶数系(y=f(x)系統)」の振る舞い</font>
![20200109200426.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/078d2c08-3782-8695-94e9-18366c757687.gif)
<font color="green">一次元操作系における「偶数系(x=f(y)系統)」の振る舞い</font>
![20200109200959.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/9a0c5d24-9957-370a-2a49-04fdbe1426e6.gif)
ところで「**<font color="red">三辺比1:sqrt(2):sqrt(3)の直角三角形</font>**」の角度比はどうなっているのでしょう？ それについて考え始めると、いきなり三角関数表の限界を問う内容に突入してしまいます。
[三角関数表](http://emath.s40.xrea.com/ydir/Wiki/index.php?%BB%B0%B3%D1%B4%D8%BF%F4%C9%BD)
上掲プログラムではとりあえず「**立方対角線を立方眼の軸に合わせた図形はどの方角から観察しても正六角形となるのが自明の理である**」なる立場を貫いて<font color="green">cos(θ)=1/3(≃0.333…)</font>という計算結果を採択ししました。一方、実際の数学史上においてはこの**角度**<font color="green">θ</font>は概ね正五角形の性質記述で登場する<font color="green">cos(72度=2π/5ラジアン)=sin(18度=π/10ラジアン)=(sqrt(5)-1)/4≃0.3090175…</font>で近似されてきたのです。
[cos72度、sin18度の2通りの求め方](https://mathwords.net/cos72dosin18do)
![cos72do2-300x298.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/d7e1d31c-c35d-6015-8551-f686301c1b5a.png)
まさにここで**正五角形**(<font color="blue">Pentagon</font>)の概念が乱入してくる訳ですね。これはこれでまぁ、それなりに良いアイディアであったとはいえましょう。人類は**10進法**とか大好きですし…
[正五角形というだけで 分かる角度は…](https://blog.goo.ne.jp/ohimatubusi/e/d83fd3f56d71b3c7b4b1df594b357a0d)
![スクリーンショット 2020-04-04 5.53.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/8a7fdf7b-84c8-801a-b430-e663969382ec.png)
難解で知られる**ハミルトンの四元数**(<font color="blue">Hamilton's Quaternion</font>)概念の中核をなす幾何学概念の一つ。
[【Rで球面幾何学】ハミルトンの四元数(Quaternion)は何を表しているのか？](https://qiita.com/ochimusha01/items/aff8d52f20af01d13bed)

<!-- html table generated in R 3.5.2 by xtable 1.8-4 package -->
<!-- Sat Apr  4 06:36:35 2020 -->
<table border=1>
<tr> <th>  </th> <th> i </th> <th> j </th> <th> k </th>  </tr>
  <tr> <td align="right"> i </td> <td> -1 </td> <td> -k </td> <td> j </td> </tr>
  <tr> <td align="right"> j </td> <td> k </td> <td> -1 </td> <td> -i </td> </tr>
  <tr> <td align="right"> k </td> <td> -j </td> <td> i </td> <td> -1 </td> </tr>
   </table>


それにも関わらず、日常生活の中に思わぬ形で浸透していた？
[【Rで球面幾何学】正四面体と正六面体と正八面体の連続性と「テトラパックの思わぬ正体」について。](https://qiita.com/ochimusha01/items/3356f7c805917660632c)
![yjimage.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/8910e536-ab57-820f-928d-c75a5c7a4f77.jpeg)
![triangles010.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/c96b2205-fc22-6293-51a7-5b7541dd7001.gif)