【オイラーの多面体定理と正多面体】二次元上の多角形と三次元上の多面体の往復

[【Rで球面幾何学】正六面体と正十二面体の間の往復(「屋根掛け法」とは何か？)](https://qiita.com/ochimusha01/items/37e73f243a0b2f2cba9d)
![Rplot25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/bbaeb08a-31a7-08f0-f8a3-4f0b9fcfe4a3.png)
![cube_in_dodecahedron19.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/91cdee4b-f7e1-aba8-4ac4-ad02816a8431.gif)
ここで紹介した**正十二面体**(<font color="blue">Dodecahedron</font>)における「**屋根掛け法**(<font color="blue">Roofing method</font>)」の**概念**は案外、他の図形にも応用出来たりするのです。

##【<font color="red">3^n集と2^n3^m集の往復</font>】正三角形(<font color="blue">Triangle</font>)と正六角形(<font color="blue">Hexagon</font>)の間の平方双対変換(<font color="blue">Square Dual Transform</font>)

直接「**屋根掛け法**」自体には関係しませんが、全体像を俯瞰するのに必要不可欠なので一応紹介しておきます。**正三角形**は各頂点より２辺ずつ伸ばした合計6辺を結ぶと自己相似図形を再構成するのです。
![Rplot07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/790a7a5d-5ef1-0704-57c6-ac2f1f3a7a4d.png)

```R
#Equilateral Triangle(S) 
cx=c(-2,2,0,-2)
cy=c(1,1,-3,1)
plot(cx,cy,type="l",asp=1,xlim=c(-2,2),ylim=c(-3,1),col=rgb(0,0,1),lwd=2, main="Equilateral Triangle(S)",xlab="X axis",ylab="Y axis")

lines(c(-1,0), c(-1,1),col=rgb(0,0,1),lwd=2)
lines(c(0,1), c(1,-1),col=rgb(0,0,1),lwd=2)
lines(c(-1,1), c(-1,-1),col=rgb(0,0,1),lwd=2)                        

#方眼(Square Grid)
for (i in -5:5) {
abline(h = i,col=c(200,200,200))
abline(v = i,col=c(200,200,200))
 }                             

#三角形塗り潰し
polygon(c(-1,0,1,-1), #x
c(-1,1,-1,-1), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(0,1,0)) 　#塗りつぶす色
```
その**平面充填**(<font color="blue">Tiling</font>)に際しては、**奇数の階差数列**単位でこれが繰り返されるのです。一方向に伸びていくイメージ。

```R
#階差数列の導出
> c0<-c(0,1,4,9,16,25,36)
> diff(c0)
[1]  1  3  5  7  9 11

#一般項
f0<-function(x){
d<-0
for(i in 0:x){
d<-d+2*i+1
}
return(d)
}
>c(f0(0),f0(1),f0(2),f0(3),f0(4),f0(5))
[1]  1  4  9 16 25 36
```
この様に「<font color="green">中心面より各頂点より２辺ずつ伸ばした合計6辺を結ぶと相似形を再構成する</font>」**正三角形**に**平方双対変換**(<font color="blue">Square Dual Transform</font>)を加えると「<font color="green">中心点より6辺を伸ばした</font>」**正六角形**となります。
![Rplot08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/4c424e9d-07b7-fee2-7f16-e7a9a5e807a0.png)

```R
#Hexagon 
cx=c(-2,-1,1,2,1,-1,-2)
cy=c(0,2,2,0,-2,-2,0)
plot(cx,cy,type="l",asp=1,xlim=c(-2,2),ylim=c(-2,2),col=rgb(0,0,1),lwd=2, main="Hexagon",xlab="X axis",ylab="Y axis")

lines(c(-1,1), c(-2,2),col=rgb(0,0,1),lwd=2)
lines(c(-1,1), c(2,-2),col=rgb(0,0,1),lwd=2)                        
lines(c(-2,2), c(0,0),col=rgb(0,0,1),lwd=2)                        

#方眼(Square Grid)
for (i in -5:5) {
abline(h = i,col=c(200,200,200))
abline(v = i,col=c(200,200,200))
}                             

#六角形塗り潰し
polygon(c(-2,-1,1,2,1,-1,-2), #x
c(0,2,2,0,-2,-2,0), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(0,1,0)) 　#塗りつぶす色
```

その**平面充填**(<font color="blue">Tiling</font>)に際してはもはや自己相似型は現れず、距離に対して**初項1,6の倍数を階差数列**単位で構成数が増加していきます。六方に広がっていくイメージ。

```R
#階差数列の導出
> c0<-c(1,7,19,37,61,91)
> diff(c0)
[1]  6 12 18 24 30

#一般項
f0<-function(x){
d<-1
for(i in 0:x){
d<-d+6*i
}
return(d)
}
>c(f0(0),f0(1),f0(2),f0(3),f0(4),f0(5))
[1]  1  7 19 37 61 91
```
ところで整数倍の**平方眼**(<font color="blue">Square Grid</font>)を意識したこの図示は**正六角形**(<font color="blue">Regurar Hexagon</font>)をちゃんと描いていません。逆にかかる変遷において**正六角形**を描こうとするなら**平方眼**に収まらないのです。**正三角形**が**平面充填性**は備えつつ、**立体充填性**(<font color="blue">Space Filling</font>)までは備えていないであろう事は、この辺りからも推察可能という次第。
[【オイラーの多面体定理と正多面体】正四面体と正六面体と正八面体の連続性と「テトラパックの思わぬ正体」について。](https://qiita.com/ochimusha01/items/3356f7c805917660632c)
![Rplot22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/65f5aa77-620b-eaa0-20e4-4b29789f3394.png)

##【<font color="red">2^n集と2^n3^m集の往復</font>】正方形(<font color="blue">Square</font>)と正八面体(<font color="blue">Octahedron</font>)の往復

以下の投稿では「**オイラーの多角形定理は、平面上では**<font color="green">**頂点**</font>(<font color="blue">Vertex</font>)<font color="green">の数－**辺**</font>(<font color="blue">Edge</font>)<font color="green">の数</font>＝<font color="green">0</font>**もしくは**<font color="green">**頂点**</font>(<font color="blue">Vertex</font>)<font color="green">の数－**辺**</font>(<font color="blue">Edge</font>)<font color="green">の数＋**面**</font>(<font color="blue">Face</font>)<font color="green">の数</font>＝<font color="green">1</font>**となる**」としました。
[【オイラーの多面体定理と正多面体】「オイラーの多角形定理」と「意味論的統制」概念の導入](https://qiita.com/ochimusha01/items/19c9b4cd04d92f678f78)

逆を言えばXY軸上の正方形における**平方対角線**(<font color="blue">Square Diagonal</font>)２本の交点に**原蹠**(<font color="blue">Portal</font>)と**対蹠**(<font color="blue">Antipordal</font>)の2点を加えて**表裏**(<font color="blue">Head-Tail</font>)の概念を導入しZ軸上に展開する同じ長さの3本目の平方対角線を加えたのが**正八面体**という事になります。とりあえずこの変換においては「**表**(<font color="blue">Head</font>)」側の「**屋根掛け**」と「**裏**(<font color="blue">Tail</font>)」の「**屋根掛け**」が完全に一致…

###「**表**(<font color="blue">Head</font>)」側の「**屋根掛け**」
![Rplot05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/d51a44bd-33bc-50d6-d20c-2cd8783b6b03.png)

```R
#Roofing Method from Square to Octahedron(Head) 
cx=c(-2,2,2,-2,-2)
cy=c(-2,-2,2,2,-2)
plot(cx,cy,type="l",asp=1,xlim=c(-3,3),ylim=c(-3,3),col=rgb(0,0,1),lwd=2, main="Roofing Method from Square to Octahedron(Head)",xlab="X axis",ylab="Y axis")

#方眼(Square Grid)
for (i in -5:5) {
abline(h = i,col=c(200,200,200))
abline(v = i,col=c(200,200,200))
 } 

#三角形１(赤)
polygon(c(-2,2,0,-2), #x
c(2,2,0,2), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(1,0,0)) 　#塗りつぶす色

#三角形2(緑)
polygon(c(2,2,0,2), #x
c(2,-2,0,2), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(0,1,0)) 　#塗りつぶす色

#三角形3(青)
polygon(c(2,0,-2,2), #x
c(-2,0,-2,-2), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(0,0,1)) 　#塗りつぶす色

#三角形4(水色)
polygon(c(-2,0,-2,-2), #x
c(2,0,-2,2), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(0,1,1)) 　#塗りつぶす色

lines(c(-2,2), c(2,-2),col=rgb(0,0,1),lwd=2)
lines(c(-2,-2), c(2,2),col=rgb(0,0,1),lwd=2)
```

###「**裏**(<font color="blue">Tail</font>)」側の「**屋根掛け**」
![Rplot06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/b1af6a89-26ca-9b8c-984d-ce80c880e118.png)

```R
#Roofing Method from Square to Octahedron(Tail) 
cx=c(-2,2,2,-2,-2)
cy=c(-2,-2,2,2,-2)
plot(cx,cy,type="l",asp=1,xlim=c(-3,3),ylim=c(-3,3),col=rgb(0,0,1),lwd=2, main="Roofing Method from Square to Octahedron(Tail)",xlab="X axis",ylab="Y axis")

#方眼(Square Grid)
for (i in -5:5) {
abline(h = i,col=c(200,200,200))
abline(v = i,col=c(200,200,200))
 } 

#三角形１(青)
polygon(c(-2,2,0,-2), #x
c(2,2,0,2), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(0,0,1)) 　#塗りつぶす色

#三角形2(水色)
polygon(c(2,2,0,2), #x
c(2,-2,0,2), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(0,1,1)) 　#塗りつぶす色

#三角形3(赤)
polygon(c(2,0,-2,2), #x
c(-2,0,-2,-2), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(1,0,0)) 　#塗りつぶす色

#三角形4(緑)
polygon(c(-2,0,-2,-2), #x
c(2,0,-2,2), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(0,1,0)) 　#塗りつぶす色

lines(c(-2,2), c(2,-2),col=rgb(0,0,1),lwd=2)
lines(c(-2,-2), c(2,2),col=rgb(0,0,1),lwd=2)
```

###変換結果
![triangles005.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/dba9f133-49bb-d923-a78e-9fea537f5467.gif)

```R
library(rgl)
#頂点座標=8個
texts3d(0,0,0,texts=c("(0,0,0)"),col=rgb(0,0,0),adj=1.0)
texts3d(1,0,0,texts=c("(1,0,0)"),col=rgb(0,0,0),adj=1.0)
texts3d(0,1,0,texts=c("(0,1,0)"),col=rgb(0,0,0),adj=1.0)
texts3d(1,1,0,texts=c("(1,1,0)"),col=rgb(0,0,0),adj=1.0)
texts3d(0,0,1,texts=c("(0,0,1)"),col=rgb(0,0,0),adj=1.0)
texts3d(1,0,1,texts=c("(1,0,1)"),col=rgb(0,0,0),adj=1.0)
texts3d(0,1,1,texts=c("(0,1,1)"),col=rgb(0,0,0),adj=1.0)
texts3d(1,1,1,texts=c("(1,1,1)"),col=rgb(0,0,0),adj=1.0)
#正六面体(Square)本体=6面

lines3d(c(0,1,1,0,0),c(0,0,1,1,0),c(0,0,0,0,0),col=rgb(0,0,0),lwd=1)
lines3d(c(0,1,1,0,0),c(0,0,1,1,0),c(1,1,1,1,1),col=rgb(0,0,0),lwd=1)
lines3d(c(0,0),c(0,0),c(0,1),col=rgb(0,0,0),lwd=1)
lines3d(c(1,1),c(0,0),c(0,1),col=rgb(0,0,0),lwd=1)
lines3d(c(0,0),c(1,1),c(0,1),col=rgb(0,0,0),lwd=1)
lines3d(c(1,1),c(1,1),c(0,1),col=rgb(0,0,0),lwd=1)

#平方対角線(長さsqrt(2))=6面*2=12本
lines3d(c(0,1),c(0,1),c(0,0),col=rgb(0,1,0),lwd=1)
lines3d(c(0,1),c(1,0),c(0,0),col=rgb(0,1,0),lwd=1)
lines3d(c(0,1),c(0,1),c(1,1),col=rgb(0,1,0),lwd=1)
lines3d(c(0,0),c(0,1),c(0,1),col=rgb(0,1,0),lwd=1)
lines3d(c(0,1),c(1,0),c(1,1),col=rgb(0,1,0),lwd=1)
lines3d(c(0,0),c(0,1),c(1,0),col=rgb(0,1,0),lwd=1)
lines3d(c(0,1),c(0,0),c(0,1),col=rgb(0,1,0),lwd=1)
lines3d(c(0,1),c(0,0),c(1,0),col=rgb(0,1,0),lwd=1)
lines3d(c(1,1),c(0,1),c(1,0),col=rgb(0,1,0),lwd=1)
lines3d(c(1,1),c(0,1),c(0,1),col=rgb(0,1,0),lwd=1)
lines3d(c(0,1),c(1,1),c(1,0),col=rgb(0,1,0),lwd=1)
lines3d(c(0,1),c(1,1),c(0,1),col=rgb(0,1,0),lwd=1)

#立方対角線(長さsqrt(3))=3本

lines3d(c(0,1),c(0,1),c(0,1),col=rgb(0,0,1),lwd=1)
lines3d(c(0,1),c(1,0),c(1,0),col=rgb(0,0,1),lwd=1)
lines3d(c(0,1),c(0,1),c(1,0),col=rgb(0,0,1),lwd=1)

#正八面体(1辺sqrt(2))
triangles3d(c(1,1/2,1/2),c(1/2,1,1/2),c(1/2,1/2,0),col=rgb(1,0,0),lwd=1)
triangles3d(c(1/2,0,1/2),c(1,1/2,1/2),c(1/2,1/2,0),col=rgb(0,1,0),lwd=1)
triangles3d(c(0,1/2,1/2),c(1/2,0,1/2),c(1/2,1/2,0),col=rgb(0,0,1),lwd=1)
triangles3d(c(1/2,1,1/2),c(0,1/2,1/2),c(1/2,1/2,0),col=rgb(0,1,1),lwd=1)

triangles3d(c(1,1/2,1/2),c(1/2,1,1/2),c(1/2,1/2,1),col=rgb(0,0,1),lwd=1)
triangles3d(c(1/2,0,1/2),c(1,1/2,1/2),c(1/2,1/2,1),col=rgb(0,1,1),lwd=1)
triangles3d(c(0,1/2,1/2),c(1/2,0,1/2),c(1/2,1/2,1),col=rgb(1,0,0),lwd=1)
triangles3d(c(1/2,1,1/2),c(0,1/2,1/2),c(1/2,1/2,1),col=rgb(0,1,0),lwd=1)

#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="~/Desktop/triangles005") 
```
ある意味、正三角形を中心と各頂点で結ぶ線で三分割し、中心に**原蹠**(<font color="blue">Portal</font>)と**対蹠**(<font color="blue">Antipordal</font>)を結ぶZ軸上の2点を加えて**表裏**(<font color="blue">Head-Tail</font>)の概念を導入し正四面体２個を発生させる(<font color="blue">ただしそれ自体は正多面体の範疇に含まれない</font>)**変換**の拡張版といえましょう。ただしこちらの変換の方が「(<font color="blue">主にXYZ軸上の整数倍の目盛りにのみ注目し</font>)平方対角線<font color="green">sqrt(2)</font>の存在をほぼ黙殺し得る(<font color="blue">立方対角線sqrt(3)の概念に至っては登場すらしない</font>)」という点において人間が直感的に把握可能な空間認識能力上は遥かに扱いやすいのです。
[【オイラーの多面体定理と正多面体】正四面体(Tetrahedron)と正六面体(Cube)と正八面体(Octahedron)と正二十面体(Icosahedron)の狭間。そして正十二面体（Dodecahedron）との関係について。](https://qiita.com/ochimusha01/items/5d30aab4e2e32ef9bcce)
![Tetrahedron15.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/3651c7ee-ba65-f5c6-14ae-dd295ccf7e08.gif)
![Tetrahedron07.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/9622164b-5cf0-5b1b-601f-3f09cd0d7380.gif)

その一方で**正八面体**もまた単体では**空間充填性**を備えず、**正四面体**による補完を必要とします。逆をいえば(<font color="blue">整数倍の平方眼上で自然に扱え、平面充填性も備える</font>)**正方形**や**正三角形**から変換可能な**正多面体**で、なおかつ単体で空間充填性も(<font color="blue">それも原則として整数と平方対角線sqrt(2)/立方対角線sqrt(3)に尺度の大部分を頼る平方眼/立方眼上で自然に扱える形で!!</font>)備えるのは本当に**立方体**しかないのです。
[【オイラーの多面体定理と正多面体】正四面体と正六面体と正八面体の連続性と「テトラパックの思わぬ正体」について。](https://qiita.com/ochimusha01/items/3356f7c805917660632c)

##【<font color="red">2^n3^m集内の変換</font>】六角形(<font color="blue">Hexagon</font>)と立方体(<font color="blue">Cube</font>)の往復

まずは**正六面体**からの変換について説明します。この変換では「**表**(<font color="blue">Head</font>)」側の「**屋根掛け**」と「**裏**(<font color="blue">Tail</font>)」側の「**屋根掛け**」を反転させないといけません。

###「**表**(<font color="blue">Head</font>)」側の「**屋根掛け**」

![Rplot03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/f9ca76ba-dd21-d548-cedd-777950569c99.png)

```R
#Roofing Method from Hexagon to Cube(Head)
cx=c(-2,-1,1,2,1,-1,-2)
cy=c(0,2,2,0,-2,-2,0)
plot(cx,cy,type="l",asp=1,xlim=c(-2,2),ylim=c(-2,2),col=rgb(0,0,1),lwd=2, main="Roofing Method from Hexagon to Cube(Head)",xlab="X axis",ylab="Y axis")

lines(c(-1,0), c(-2,0),col=rgb(0,0,1),lwd=2)
lines(c(-1,0), c(2,0),col=rgb(0,0,1),lwd=2)                        
lines(c(0,2), c(0,0),col=rgb(0,0,1),lwd=2)                        

#方眼(Square Grid)
for (i in -5:5) {
abline(h = i,col=c(200,200,200))
abline(v = i,col=c(200,200,200))
 }   

#菱形１
polygon(c(-2,-1,0,-1,-2), #x
c(0,2,0,-2,0), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(1,0,0)) 　#塗りつぶす色

#菱形2
polygon(c(-1,1,2,0,-1), #x
c(2,2,0,0,2), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(0,1,0)) 　#塗りつぶす色

#菱形3
polygon(c(-1,0,2,1,-1), #x
c(-2,0,0,-2,-2), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(0,0,1)) 　#塗りつぶす色
```

###「**裏**(<font color="blue">Tail</font>)」側の「**屋根掛け**」
![Rplot04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/15c03f8f-44db-355c-70b3-8714480b27e2.png)

```R
#Roofing Method from Hexagon to Cube(Tail)
cx=c(-2,-1,1,2,1,-1,-2)
cy=c(0,2,2,0,-2,-2,0)
plot(cx,cy,type="l",asp=1,xlim=c(-2,2),ylim=c(-2,2),col=rgb(0,0,1),lwd=2, main="Roofing Method from Hexagon to Cube(Tail)",xlab="X axis",ylab="Y axis")

lines(c(1,0), c(2,0),col=rgb(0,0,1),lwd=2)
lines(c(1,0), c(-2,0),col=rgb(0,0,1),lwd=2)                        
lines(c(0,-2), c(0,0),col=rgb(0,0,1),lwd=2)                        

#方眼(Square Grid)
for (i in -5:5) {
abline(h = i,col=c(200,200,200))
abline(v = i,col=c(200,200,200))
 }   

#菱形１
polygon(c(2,1,0,1,2), #x
c(0,2,0,-2,0), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(1,0,0)) 　#塗りつぶす色

#菱形2
polygon(c(1,0,-2,-1,1), #x
c(2,0,0,2,2), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(0,0,1)) 　#塗りつぶす色

#菱形3
polygon(c(1,-1,-2,0,1), #x
c(-2,-2,0,0,-2), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(0,1,0)) 　#塗りつぶす色
```
###操作結果
![Cube006.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/7033e285-744a-3783-0733-88f543cf6f72.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],LN01_cos[3])
y1<-c(portal_j, LN01_sin[1], LN02_sin[2],LN01_sin[3])
z1<-c(portal_k,AP01,AP02,AP01)
quads3d(x1,y1,z1,color=rgb(1,0,0))

x2<-c(antipordal_i, LN02_cos[1], LN01_cos[2],LN02_cos[3])
y2<-c(antipordal_j, LN02_sin[1], LN01_sin[2],LN02_sin[3])
z2<-c(antipordal_k,AP02,AP01,AP02)
quads3d(x2,y2,z2,color=rgb(1,0,0))

#立方体面描画(緑)
x1<-c(portal_i, LN01_cos[2], LN02_cos[3],LN01_cos[1])
y1<-c(portal_j, LN01_sin[2], LN02_sin[3],LN01_sin[1])
z1<-c(portal_k,AP01,AP02,AP01)
quads3d(x1,y1,z1,color=rgb(0,1,0))

x2<-c(antipordal_i, LN02_cos[2], LN01_cos[3],LN02_cos[1])
y2<-c(antipordal_j, LN02_sin[2], LN01_sin[3],LN02_sin[1])
z2<-c(antipordal_k,AP02,AP01,AP02)
quads3d(x2,y2,z2,color=rgb(0,1,0))

#立方体面描画(青)
x1<-c(portal_i, LN01_cos[3], LN02_cos[1],LN01_cos[2])
y1<-c(portal_j, LN01_sin[3], LN02_sin[1],LN01_sin[2])
z1<-c(portal_k,AP01,AP02,AP01)
quads3d(x1,y1,z1,color=rgb(0,0,1))

x2<-c(antipordal_i, LN02_cos[3], LN01_cos[1],LN02_cos[2])
y2<-c(antipordal_j, LN02_sin[3], LN01_sin[1],LN02_sin[2])
z2<-c(antipordal_k,AP02,AP01,AP02)
quads3d(x2,y2,z2,color=rgb(0,0,1))

#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="~/Desktop/Cube006")
```
ただしこの「**傾いた立方体**」扱いが中々難しいのです。というか実質上「**ハミルトンの四元数**(<font color="blue">Hamilton's Quaternion</font>)」の世界。**2次元座標系と3次元座標系の往復**も含め<font color="green">i^2=j^2=k^2=ijk=-1,ij=k,jk=i,ki=j,ji=-k,kj=-i,ik=-j</font>なる概念との格闘が待ち構えていたりします。
[【Rで球面幾何学】ハミルトンの四元数(Hamilton's Quaternion)は何を表しているのか？](https://qiita.com/ochimusha01/items/aff8d52f20af01d13bed)
![square003.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/a3185dfd-eb2e-00be-01b7-79cd6d8f019f.gif)
![square009.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/c8853011-e9d4-2c66-9242-42199a31dc67.gif)

##【<font color="red">2^n3^m集と2^n集の往復</font>】立方体(<font color="blue">Cube</font>)と正方形(<font color="blue">Square</font>)の往復

そこで**正十二面体**における「**屋根掛け法**」でもやってた事ですが、**立方対角線**=**対蹠の対**(<font color="blue">Set</font>)の位置をズラし、頂点分布を<font color="green">[1,3,3,1]</font>から<font color="green">[0,4,4,0]</font>に変更します(<font color="blue">転がして「頂点と頂点の対」から「面と面の対」へ</font>)。
![square002.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/69c0145b-4e1f-0966-7c9f-b298eb61c27f.gif)

```R
library(rgl)
#頂点座標=8個
texts3d(0,0,0,texts=c("(0,0,0)"),col=rgb(0,0,0),adj=1.0)
texts3d(1,0,0,texts=c("(1,0,0)"),col=rgb(0,0,0),adj=1.0)
texts3d(0,1,0,texts=c("(0,1,0)"),col=rgb(0,0,0),adj=1.0)
texts3d(1,1,0,texts=c("(1,1,0)"),col=rgb(0,0,0),adj=1.0)
texts3d(0,0,1,texts=c("(0,0,1)"),col=rgb(0,0,0),adj=1.0)
texts3d(1,0,1,texts=c("(1,0,1)"),col=rgb(0,0,0),adj=1.0)
texts3d(0,1,1,texts=c("(0,1,1)"),col=rgb(0,0,0),adj=1.0)
texts3d(1,1,1,texts=c("(1,1,1)"),col=rgb(0,0,0),adj=1.0)

#正六面体(Square)本体(6面)の枠線

lines3d(c(0,1,1,0,0),c(0,0,1,1,0),c(0,0,0,0,0),col=rgb(0,0,0),lwd=1)
lines3d(c(0,1,1,0,0),c(0,0,1,1,0),c(1,1,1,1,1),col=rgb(0,0,0),lwd=1)
lines3d(c(0,0),c(0,0),c(0,1),col=rgb(0,0,0),lwd=1)
lines3d(c(1,1),c(0,0),c(0,1),col=rgb(0,0,0),lwd=1)
lines3d(c(0,0),c(1,1),c(0,1),col=rgb(0,0,0),lwd=1)
lines3d(c(1,1),c(1,1),c(0,1),col=rgb(0,0,0),lwd=1)

#立方体面描画
x1<-c(0,1,1,0)
y1<-c(0,0,1,1)
z1<-c(0,0,0,0)
quads3d(x1,y1,z1,color=rgb(0,1,0))

x2<-c(0,1,1,0)
y2<-c(0,0,1,1)
z2<-c(1,1,1,1)
quads3d(x2,y2,z2,color=rgb(0,1,0))

x3<-c(0,0,0,0)
y3<-c(0,1,1,0)
z3<-c(0,0,1,1)
quads3d(x3,y3,z3,color=rgb(1,0,0))

x4<-c(1,1,1,1)
y4<-c(0,1,1,0)
z4<-c(0,0,1,1)
quads3d(x4,y4,z4,color=rgb(1,0,0))

x5<-c(0,0,1,1)
y5<-c(0,0,0,0)
z5<-c(0,1,1,0)
quads3d(x5,y5,z5,color=rgb(0,0,1))

x6<-c(0,0,1,1)
y6<-c(1,1,1,1)
z6<-c(0,1,1,0)
quads3d(x6,y6,z6,color=rgb(0,0,1))

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

この状態は**立方眼**(<font color="blue">Square Grid</font>)や**平方眼**(<font color="blue">Cube Grid</font>)の連続に埋め尽くされる「<font color="red">デカルト座標系の世界</font>(<font color="blue">Cartesian Coordinate System Set</font>)」と極めて相性が良く「**X軸、Y軸,Z軸それぞれについて四面=四辺の長さを**<font color="green">0</font>**や**<font color="green">1</font>(<font color="blue">その正方形や立方体の共通辺長</font>)**に設定する事で平面と立体の間を往復出来る**」特徴を備えているのです。
[【Rで球面幾何学】何故「正方形」ではCos(θ)+Sin(θ)iが成立するのか？](https://qiita.com/ochimusha01/items/681a6f869f594075c3c2)
![20191026163532.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/b8a81d8b-4d09-aca9-e7fb-83d621180e73.png)

**中心からの距離**に比例して**自己相似型**が現れますが、**平面充填**に際しては<font color="red">平方数</font>、**空間充填**に際しては<font color="red">立方数</font>がその増分となります。**平方対角線**<font color="green">sqrt(2)</font>に対応する<font color="green">x^2</font>,**立方対角線**<font color="green">sqrt(3)</font>に対応する<font color="green">x^3</font>といった具合…
[平方数(Square Number) - Wikipedia](https://ja.wikipedia.org/wiki/%E5%B9%B3%E6%96%B9%E6%95%B0)
[立方数(Cubic Number) - Wikipedia]()

```R
#平方数
>f0<-function(x){return(x^2)}
>c0<-c(0:5)
>f0(c0)
[1]  0  1  4  9 16 25

#立方数
> f0<-function(x){return(x^3)}
> c0<-c(0:5)
> f0(c0)
[1]   0   1   8  27  64 125
```

##ここまでの全体像の俯瞰

とりあえず、ここまでの**遷移図**(<font color="blue">Transition Diagram</font>)が以下。ちなみに「**四角形は**(<font color="blue">対角線に沿って</font>)**三角形に分割可能**」「**正六面体は正八面体と双対関係**」という要素も追加されています。
![スクリーンショット 2020-05-15 13.14.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/8a6a9e94-a47f-7631-6bec-eb74dd68d6c6.png)

```R
library(igraph)
par(mfrow=c(1,2),mar=c(3,3,3,3))
gd<-graph(c(
"Triangle(s)","Tetrahedrons",
"Tetrahedrons","Triangle(s)",
"Triangle(s)","Hexagon",
"Hexagon","Triangle(s)",
"Triangle(s)","Square",
"Square","Triangle(s)",
"Hexagon","Cube",
"Cube","Hexagon",
"Cube","Octahedron",
"Octahedron","Cube",
"Square","Octahedron",
"Octahedron","Square",
"Cube","Square",
"Square","Cube"
))
plot(gd,layout=layout.fruchterman.reingold)
```
上記の様に必ずしも全ての変遷が「<font color="red">デカルト座標系の世界</font>(<font color="blue">Cartesian Coordinate System Set</font>)」上において納得のいく形で展開する訳ではありませんが…人間はなんとかイメージ的に上手く折り合いを見つけてしまうものなんですね。

##【<font color="red">2^n3^m集から2^n3^m5^l集への遷移</font>】正八面体(<font color="blue">Octahedron</font>)から正十二面体(<font color="blue">Dodecahedron</font>)への不可逆的変換

さらにこんな情報を仕入れました。
[正八面体を上から見た図と東大の問題](https://mathtrain.jp/seihachi)

- **正八面体を上から見た図**…**正八面体**の**頂点分布**<font color="green">[1,4,1]</font>は、転がすと<font color="green">[0,3,3,0]</font>に変換される。<br>![uekara1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/23cd7734-f4f6-b37c-5852-131a6b2bd42e.png)
- **正八面体を底面に平行な平面で切断した図**<br>![danmen-300x260.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/d458c127-f8ce-1d46-993e-5b7662883bce.png)<br>![danmen2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/c795f361-100b-9d13-c406-5dfac968fe41.png)<br>この断面は**正十二面体の断面図**を連想させる。<br>[【オイラーの多面体定理と正多面体】正12面体(Regular Dodecahedron)の作図について。](https://qiita.com/ochimusha01/items/9ce61d7d5a9227235b1e)<br>![Rplot11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/a1b4fe50-4381-c0e6-a00b-70c4d99d930b.png)

要するに以下の操作により**正八面体**から**頂点分布**<font color="green">[1,3,6,6,3,1]</font>の正十二面体への変換が可能になるという事です。

- **正八面体**を転がして、その**頂点分布**を<font color="green">[1,4,1]</font>から<font color="green">[0,3,3,0]</font>へと変換する。
- それぞれの対蹠から３辺を伸ばす。
- 3頂点の中間断面二個から、それぞれ断面図に沿った新たな6頂点の断面二個を生成する。

考え方としては「<font color="red">それぞれの対蹠から三辺ずつ伸ばし、さらにそこから二辺ずつ伸ばす二段階変遷</font>」に近いものがありますね。
[【オイラーの多面体定理と正多面体】正六面体と正十二面体の間の往復(「屋根掛け法」とは何か？)](https://qiita.com/ochimusha01/items/37e73f243a0b2f2cba9d)
![Twin_Polygon005.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/202f8a73-2259-640c-2c30-5589df8a61a4.gif)

ちゃんとした図示はそのうちに。とりあえず、以下続報…