【数学溢れ話】【Token】屋根掛け法(Roofing Method)

抽象数学の領域では「数学は導入される素数の数によってその複雑さが決まる」とされていますが、まぁ(掛け算の九九などを例外とすれば)ほとんどの場合、趣味の領域を除いて「2」「3」以上の素数を導入した演算なんてまず見掛けません。
[【Rで九九】どうして36個の数字しか使われないのか？](https://qiita.com/ochimusha01/items/8d990f23ae96db0cd953)

白状してしまうと、多くの人類は、概ねたかだか以下の程度の「(素数「２」と「３」に立脚する)象眼処理」しか先験的に脳内で出来ないのです。それが「カンブリア爆発期に視覚と視覚情報を処理する脊髄を授かった生物の末裔」に定められた限界といえるかもしれません。
![スクリーンショット 2024-03-07 6.32.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/b7747983-cebb-8b0a-93a5-0db3d2049be4.png)
そう開き直って考えると、むしろ「微分積分概念に立脚する解析学と行列冤罪概念に立脚する線形代数に関心を集中させ、機械学習概念に到達した」現代実用数学の先見性を称えたくなってきます。

今回は、そうした「英断」の陰で歴史の掃き溜め送りとなった数理についての話となります。

# 正四面体/正八面体から立方体へ

以下の投稿で触れた「絶対値関数を用いて方形を描く方法」には、興味深い応用があるのです。
[【数学溢れ話】【Token】反比例関数と指数対数関数の回転](https://qiita.com/ochimusha01/items/079de6a083d5a28f7df1)
![スクリーンショット 2024-03-06 21.59.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/9cfab7a7-7e8e-f137-8054-193e860d47e1.png)
①まずはこれを用いて3枚の直角二等辺三角形と正三角形から構成される三角錐をイメージしましょう。
![スクリーンショット 2024-03-07 4.40.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/7b865f60-bf65-4192-4b01-cb79e6e6ba78.png)
位相幾何学的には「正四面体と同型」という事になりますね。
![68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303231303132352f32303231303132353134333733382e676966.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/3a1fb329-c626-a94f-0c57-445d2a771c21.gif)

```R
library(rgl)
#分割数Nod(Number of divide)=3
NoD<-3
#円周分割数列(Sequence of Divided Circumference)
SoDC<-seq(0,2*pi,length=NoD+1)

#原蹠(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,")" main="Cross section for ")

#対蹠表示
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)

#正四面体描画
mx<-cos(SoDC)*sin(pi/3)
my<-sin(SoDC)*sin(pi/3)

lines3d(c(portal_i,mx[1]),c(portal_j,my[1]),c(portal_k,-1/3),col=rgb(0,0,0),lwd=1)
lines3d(c(portal_i,mx[2]),c(portal_j,my[2]),c(portal_k,-1/3),col=rgb(0,0,0),lwd=1)
lines3d(c(portal_i,mx[3]),c(portal_j,my[3]),c(portal_k,-1/3),col=rgb(0,0,0),lwd=1)

lines3d(c(mx[1],mx[2]),c(my[1],my[2]),c(-1/3,-1/3),col=rgb(0,0,0),lwd=1)
lines3d(c(mx[2],mx[3]),c(my[2],my[3]),c(-1/3,-1/3),col=rgb(0,0,0),lwd=1)
lines3d(c(mx[3],mx[1]),c(my[3],my[1]),c(-1/3,-1/3),col=rgb(0,0,0),lwd=1)

#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="~/Desktop/Tetrahedron05")
```
こうして歪めた三角錐は、直角が集まった頂点を中心に8個集めると正八面体を構成します。
![68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303231303132352f32303231303132353134343935342e676966.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/2d6534fe-100c-14be-6f68-1a0ba8835a5a.gif)

```R
library(rgl)
#分割数Nod(Number of divide)=4
NoD<-4
#円周分割数列(Sequence of Divided Circumference)
SoDC<-seq(0,2*pi,length=NoD+1)

#原蹠(PorTal)
portal_i<-0
portal_j<-0
portal_k<-1
portal_text=paste0("AP(",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)

#正八面体描画
mx<-cos(SoDC)
my<-sin(SoDC)

lines3d(c(portal_i,mx[1]),c(portal_j,my[1]),c(portal_k,0),col=rgb(0,0,0),lwd=1)
lines3d(c(portal_i,mx[2]),c(portal_j,my[2]),c(portal_k,0),col=rgb(0,0,0),lwd=1)
lines3d(c(portal_i,mx[3]),c(portal_j,my[3]),c(portal_k,0),col=rgb(0,0,0),lwd=1)
lines3d(c(portal_i,mx[4]),c(portal_j,my[4]),c(portal_k,0),col=rgb(0,0,0),lwd=1)

lines3d(c(mx[1],mx[2]),c(my[1],my[2]),c(0,0),col=rgb(0,0,0),lwd=1)
lines3d(c(mx[2],mx[3]),c(my[2],my[3]),c(0,0),col=rgb(0,0,0),lwd=1)
lines3d(c(mx[3],mx[4]),c(my[3],my[4]),c(0,0),col=rgb(0,0,0),lwd=1)
lines3d(c(mx[4],mx[1]),c(my[4],my[1]),c(0,0),col=rgb(0,0,0),lwd=1)

lines3d(c(mx[1],antipordal_i),c(my[1],antipordal_j),c(0,antipordal_k),col=rgb(0,0,0),lwd=1)
lines3d(c(mx[2],antipordal_i),c(my[2],antipordal_j),c(0,antipordal_k),col=rgb(0,0,0),lwd=1)
lines3d(c(mx[3],antipordal_i),c(my[3],antipordal_j),c(0,antipordal_k),col=rgb(0,0,0),lwd=1)
lines3d(c(mx[4],antipordal_i),c(my[4],antipordal_j),c(0,antipordal_k),col=rgb(0,0,0),lwd=1)

#追加立方対角線(Cubic Diagonal)

ap11_text=paste0("AP(",round(mx[1]),",",round(my[1]),",","0",")")
texts3d(mx[1],my[1],0,texts=ap11_text,col=rgb(0,0,0),adj=1.0)
ap12_text=paste0("AP(",round(mx[3]),",",round(my[3]),",","0",")")
texts3d(mx[3],my[3],0,texts=ap12_text,col=rgb(0,0,0),adj=1.0)
lines3d(c(mx[1],mx[3]),c(my[1],my[3]),c(0,0),col=rgb(1,0,0),lwd=2)

ap21_text=paste0("AP(",round(mx[2]),",",round(my[2]),",","0",")")
texts3d(mx[2],my[2],0,texts=ap21_text,col=rgb(0,0,0),adj=1.0)
ap22_text=paste0("AP(",round(mx[4]),",",round(my[4]),",","0",")")
texts3d(mx[4],my[4],0,texts=ap22_text,col=rgb(0,0,0),adj=1.0)
lines3d(c(mx[2],mx[4]),c(my[2],my[4]),c(0,0),col=rgb(1,0,0),lwd=2)

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

```

正四面体はこうした発展性に欠けています。例えばエッシャーの騙し絵の様に二つの正四面体を組み合わせて空間充填し新しい正多面体に発展させる事などは出来ないのです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/8eb6eb94-21c5-4937-476c-ad7e34f8235d.png)
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3539373737322f66653761306130372d666333662d633866632d343138622d6566353763386438343338652e676966.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/006f744a-eaa1-a00c-19d2-3004e5c384f7.gif)

```R
library(rgl)
#分割数Nod(Number of divide)=3
NoD<-3
#円周分割数列(Sequence of Divided Circumference)
SoDC<-seq(0,2*pi,length=NoD+1)
#座標起点
texts3d(-1,0,0,texts=c("(-1,0,0)"),col=rgb(1,0,0),adj=1.0)
texts3d(1,0,0,texts=c("(1,0,0)"),col=rgb(0,0,1),adj=1.0)
#-1を起点(start point)とする正四面体（Normal(Regular)Tetrahedron）
my<-cos(SoDC)
mz<-sin(SoDC)
mx<-c(1/3,1/3,1/3,1/3)
triangles3d(c(-1,mx[2:3]),c(0,my[2:3]),c(0,mz[2:3]),col=rgb(1,0,0),lwd=1)
triangles3d(c(mx[1],-1,mx[3]),c(my[1],0,my[3]),c(mz[1],0,mz[3]),col=rgb(1,0,0),lwd=1)
triangles3d(c(mx[1:2],-1),c(my[1:2],0),c(mz[1:2],0),col=rgb(1,0,0),lwd=1)
triangles3d(mx[1:3],my[1:3],mz[1:3],col=rgb(1,0,0),lwd=1)
#1を起点(start point)とする逆正四面体（Reverse(Regular)Tetrahedron）
py<-cos(SoDC+pi)
pz<-sin(SoDC+pi)
px<-c(-1/3,-1/3,-1/3,-1/3)
triangles3d(c(1,px[2:3]),c(0,py[2:3]),c(0,pz[2:3]),col=rgb(0,0,1),lwd=1)
triangles3d(c(px[1],1,px[3]),c(py[1],0,py[3]),c(pz[1],0,pz[3]),col=rgb(0,0,1),lwd=1)
triangles3d(c(px[1:2],1),c(py[1:2],0),c(pz[1:2],0),col=rgb(0,0,1),lwd=1)
triangles3d(px[1:3],py[1:3],pz[1:3],col=rgb(0,0,1),lwd=1)

#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="C:/Users/81806/Desktop/Markdown/Tetrahedron03")
```
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3539373737322f61306137633431362d616437622d366332642d616437322d6562303137303731303336362e676966.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/1b8c5bc6-a45e-0199-9fe4-0ca00578eec0.gif)

```R
library(rgl)
#分割数Nod(Number of divide)=3
NoD<-3
#円周分割数列(Sequence of Divided Circumference)
SoDC<-seq(0,2*pi,length=NoD+1)
#座標起点
texts3d(-1,0,0,texts=c("(-1,0,0)"),col=rgb(1,0,0),adj=1.0)
texts3d(1,0,0,texts=c("(1,0,0)"),col=rgb(0,0,1),adj=1.0)
#texts3d(-5/3,0,0,texts=c("(-5/3,0,0)"),col=rgb(0,0,1),adj=1.0)
#texts3d(5/3,0,0,texts=c("(5/3,0,0)"),col=rgb(1,0,0),adj=1.0)
#-1を起点(start point)とする正四面体（Normal(Regular)Tetrahedron）
my<-cos(SoDC)
mz<-sin(SoDC)
mx<-c(1/3,1/3,1/3,1/3)
lines3d(c(-1,mx[1]),c(0,my[1]),c(0,mz[1]),col=rgb(1,0,0),lwd=1)
lines3d(c(-1,mx[2]),c(0,my[2]),c(0,mz[2]),col=rgb(1,0,0),lwd=1)
lines3d(c(-1,mx[3]),c(0,my[3]),c(0,mz[3]),col=rgb(1,0,0),lwd=1)
triangles3d(mx[1:3],my[1:3],mz[1:3],col=rgb(1,0,0),lwd=1)
#lines3d(c(mx[1],mx[2]),c(my[1],my[2]),c(mz[1],mz[2]),col=rgb(1,0,0),lwd=1)
#lines3d(c(mx[2],mx[3]),c(my[2],my[3]),c(mz[2],mz[3]),col=rgb(1,0,0),lwd=1)
#lines3d(c(mx[3],mx[1]),c(my[3],my[1]),c(mz[3],mz[1]),col=rgb(1,0,0),lwd=1)
#lines3d(c(5/3,mx[1]),c(0,my[1]),c(0,mz[1]),col=rgb(1,0,0),lwd=1)
#lines3d(c(5/3,mx[2]),c(0,my[2]),c(0,mz[2]),col=rgb(1,0,0),lwd=1)
#lines3d(c(5/3,mx[3]),c(0,my[3]),c(0,mz[3]),col=rgb(1,0,0),lwd=1)

#1を起点(start point)とする逆正四面体（Reverse(Regular)Tetrahedron）
py<-cos(SoDC+pi)
pz<-sin(SoDC+pi)
px<-c(-1/3,-1/3,-1/3,-1/3)
lines3d(c(1,px[1]),c(0,py[1]),c(0,pz[1]),col=rgb(0,0,1),lwd=1)
lines3d(c(1,px[2]),c(0,py[2]),c(0,pz[2]),col=rgb(0,0,1),lwd=1)
lines3d(c(1,px[3]),c(0,py[3]),c(0,pz[3]),col=rgb(0,0,1),lwd=1)
triangles3d(px[1:3],py[1:3],pz[1:3],col=rgb(0,0,1),lwd=1)
#lines3d(c(px[1],px[2]),c(py[1],py[2]),c(pz[1],pz[2]),col=rgb(1,0,0),lwd=1)
#lines3d(c(px[2],px[3]),c(py[2],py[3]),c(pz[2],pz[3]),col=rgb(1,0,0),lwd=1)
#lines3d(c(px[3],px[1]),c(py[3],py[1]),c(pz[3],pz[1]),col=rgb(1,0,0),lwd=1)
#lines3d(c(-5/3,px[1]),c(0,py[1]),c(0,pz[1]),col=rgb(1,0,0),lwd=1)
#lines3d(c(-5/3,px[2]),c(0,py[2]),c(0,pz[2]),col=rgb(1,0,0),lwd=1)
#lines3d(c(-5/3,px[3]),c(0,py[3]),c(0,pz[3]),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/Tetrahedron01")
```
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3539373737322f65363063356564352d633531352d346633342d656135662d3264316237616632376636322e676966.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/e34484bc-e28e-98ec-4107-3691bea013cd.gif)

```R
library(rgl)
#分割数Nod(Number of divide)=3
NoD<-3
#円周分割数列(Sequence of Divided Circumference)
SoDC<-seq(0,2*pi,length=NoD+1)
#座標起点
texts3d(-1,0,0,texts=c("(-1,0,0)"),col=rgb(1,0,0),adj=1.0)
texts3d(1,0,0,texts=c("(1,0,0)"),col=rgb(0,0,1),adj=1.0)
texts3d(-5/3,0,0,texts=c("(-5/3,0,0)"),col=rgb(0,0,1),adj=1.0)
texts3d(5/3,0,0,texts=c("(5/3,0,0)"),col=rgb(1,0,0),adj=1.0)
#-1を起点(start point)とする正四面体（Normal(Regular)Tetrahedron）
my<-cos(SoDC)
mz<-sin(SoDC)
mx<-c(1/3,1/3,1/3,1/3)
lines3d(c(-1,mx[1]),c(0,my[1]),c(0,mz[1]),col=rgb(1,0,0),lwd=1)
lines3d(c(-1,mx[2]),c(0,my[2]),c(0,mz[2]),col=rgb(1,0,0),lwd=1)
lines3d(c(-1,mx[3]),c(0,my[3]),c(0,mz[3]),col=rgb(1,0,0),lwd=1)
triangles3d(mx[1:3],my[1:3],mz[1:3],col=rgb(1,0,0),lwd=1)
#lines3d(c(mx[1],mx[2]),c(my[1],my[2]),c(mz[1],mz[2]),col=rgb(1,0,0),lwd=1)
#lines3d(c(mx[2],mx[3]),c(my[2],my[3]),c(mz[2],mz[3]),col=rgb(1,0,0),lwd=1)
#lines3d(c(mx[3],mx[1]),c(my[3],my[1]),c(mz[3],mz[1]),col=rgb(1,0,0),lwd=1)
lines3d(c(5/3,mx[1]),c(0,my[1]),c(0,mz[1]),col=rgb(1,0,0),lwd=1)
lines3d(c(5/3,mx[2]),c(0,my[2]),c(0,mz[2]),col=rgb(1,0,0),lwd=1)
lines3d(c(5/3,mx[3]),c(0,my[3]),c(0,mz[3]),col=rgb(1,0,0),lwd=1)

#1を起点(start point)とする逆正四面体（Reverse(Regular)Tetrahedron）
py<-cos(SoDC+pi)
pz<-sin(SoDC+pi)
px<-c(-1/3,-1/3,-1/3,-1/3)
lines3d(c(1,px[1]),c(0,py[1]),c(0,pz[1]),col=rgb(0,0,1),lwd=1)
lines3d(c(1,px[2]),c(0,py[2]),c(0,pz[2]),col=rgb(0,0,1),lwd=1)
lines3d(c(1,px[3]),c(0,py[3]),c(0,pz[3]),col=rgb(0,0,1),lwd=1)
triangles3d(px[1:3],py[1:3],pz[1:3],col=rgb(0,0,1),lwd=1)
#lines3d(c(px[1],px[2]),c(py[1],py[2]),c(pz[1],pz[2]),col=rgb(1,0,0),lwd=1)
#lines3d(c(px[2],px[3]),c(py[2],py[3]),c(pz[2],pz[3]),col=rgb(1,0,0),lwd=1)
#lines3d(c(px[3],px[1]),c(py[3],py[1]),c(pz[3],pz[1]),col=rgb(1,0,0),lwd=1)

lines3d(c(-5/3,px[1]),c(0,py[1]),c(0,pz[1]),col=rgb(0,0,1),lwd=1)
lines3d(c(-5/3,px[2]),c(0,py[2]),c(0,pz[2]),col=rgb(0,0,1),lwd=1)
lines3d(c(-5/3,px[3]),c(0,py[3]),c(0,pz[3]),col=rgb(0,0,1),lwd=1)

#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="C:/Users/81806/Desktop/Markdown/Tetrahedron02")
```
②今度は各辺に-1を掛けてそれぞれの二等辺三角形を正方形に補完します。
![スクリーンショット 2024-03-07 5.46.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/9b404246-961e-935f-2e3e-c9750673ebd0.png)

* ここに現れる正方形を3枚張り合わせた構造は、x^3が3x^2に微分される状況を説明するのにしばしば使われますね。
[【標準】三次式の因数分解と体積](https://math.nakaken88.com/textbook/standard-cubic-factorization-and-volume/)

③残りの過程はもうパズルみたいなもの。一つの角にijkを揃える形で４個の三角錐を並べると「外観的には立方体が構成されるのです。
![スクリーンショット 2024-03-07 6.43.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/3f9211f7-bfb3-dbe1-773b-b39e44098b3d.png)

「外観的には」という箇所が問題で、この立方体には正四面体型の中空が残ってしまっているのです。
![スクリーンショット 2024-03-07 6.50.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/2c138406-5e49-fd47-6606-2c5c4a95c7fd.png)
「正多面体のうち単体で空間充填性を備えるのは立法体のみで、正四面体と正八面体は両者を組み合わせる形で空間充填性を備える」とは、まさにこの状態を指す訳です。
![68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303231303132352f32303231303132353135303333352e676966.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/98d333eb-6126-49b8-4a23-9ce701cb0baa.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))=2個(000起点)
triangles3d(c(0,1,1),c(0,1,0),c(0,0,1),col=rgb(0,0,1),lwd=1)
triangles3d(c(0,1,0),c(0,0,1),c(0,1,1),col=rgb(0,0,1),lwd=1)
triangles3d(c(0,0,1),c(0,1,1),c(0,1,0),col=rgb(0,0,1),lwd=1)
triangles3d(c(1,1,0),c(1,0,1),c(0,1,1),col=rgb(0,0,1),lwd=1)

#正四面体(1辺sqrt(2))=2個(111起点)
triangles3d(c(1,0,0),c(1,1,0),c(1,0,1),col=rgb(1,0,0),lwd=1)
triangles3d(c(1,0,1),c(1,1,0),c(1,0,0),col=rgb(1,0,0),lwd=1)
triangles3d(c(1,1,0),c(1,0,0),c(1,0,1),col=rgb(1,0,0),lwd=1)
triangles3d(c(0,0,1),c(0,1,0),c(1,0,0),col=rgb(1,0,0),lwd=1)

#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="~/Desktop/triangles001") 
```
![68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303230313132392f32303230313132393035353834382e676966.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/8db75402-f75c-d08a-1cfb-1af80ec2762e.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(0,1,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,1,0),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,0),lwd=1)

triangles3d(c(1,1/2,1/2),c(1/2,1,1/2),c(1/2,1/2,1),col=rgb(0,1,0),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,0),lwd=1)
triangles3d(c(0,1/2,1/2),c(1/2,0,1/2),c(1/2,1/2,1),col=rgb(0,1,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/triangles004") 
また正四面体
```
ところが、古典時代の幾何学者達はそうは考えず「正四面体に「屋根掛け」すると正方形になる」と考えたのでした。これがいわゆる「屋根掛け法(Roofing Method)」となります。

# 立方体から正十二面体へ。

このアイディアをさらに発展させたのが「立方体を正十二面体に拡張する屋根掛け法」です。
![68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303231303631332f32303231303631333139333830312e676966.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/cbdc2e74-c032-1fba-c747-d789069fd847.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,")" main="Cross section for ")

#対蹠表示
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)座標
CLN0=sin(pi/3)
Cc0<-seq(0,2*pi,length=4)
CLN01_cos<-cos(Cc0)*CLN0
CLN01_sin<-sin(Cc0)*CLN0
CLN02_cos<-cos(Cc0+pi)*CLN0
CLN02_sin<-sin(Cc0+pi)*CLN0

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

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

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

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

#立方体描写(中線の結合)
lines3d(c(CLN01_cos[1],CLN02_cos[3],CLN01_cos[2],CLN02_cos[1],CLN01_cos[3],CLN02_cos[2],CLN01_cos[1]),c(CLN01_sin[1],CLN02_sin[3],CLN01_sin[2],CLN02_sin[1],CLN01_sin[3],CLN02_sin[2],CLN01_sin[1]),c(CAP01,CAP02,CAP01,CAP02,CAP01,CAP02,CAP01),col=rgb(0,1,0),lwd=1)

###正十二面体の描画###

#xy軸上の経度(LoNgitude)座標

#最初の頂点３個x2
LN01=sin(1/5*pi)
c0<-seq(0,2*pi,length=4)

#頭蹠側一段目３個
LNa_cos<-cos(c0)*LN01
LNa_sin<-sin(c0)*LN01

#対蹠側一段目３個
LNd_cos<-cos(c0+pi)*LN01
LNd_sin<-sin(c0+pi)*LN01

#中央の頂点6個x2
LN10=sin(2/5*pi)
c00<-seq(0,2*pi,length=4)

#頭蹠側一段目３個
bx00<-cos(c00+pi/2)
by00<-sin(c00+pi/2)
bx01<-cos(c00+pi*2/5+pi/2)
by01<-sin(c00+pi*2/5+pi/2)
bx02<-c(bx00[1],bx01[1],bx00[2],bx01[2],bx00[3],bx01[3],bx00[4])
by02<-c(by00[1],by01[1],by00[2],by01[2],by00[3],by01[3],by00[4])
LNb_cos<-bx02*LN10
LNb_sin<-by02*LN10

#対蹠側一段目３個
cx00<-cos(c00-pi/2)
cy00<-sin(c00-pi/2)
cx01<-cos(c00+pi*2/5-pi/2)
cy01<-sin(c00+pi*2/5-pi/2)
cx02<-c(cx00[1],cx01[1],cx00[2],cx01[2],cx00[3],cx01[3],cx00[4])
cy02<-c(cy00[1],cy01[1],cy00[2],cy01[2],cy00[3],cy01[3],cy00[4])
LNc_cos<-cx02*LN10
LNc_sin<-cy02*LN10

#立方体におけるz軸上の緯度(LaTitude)座標
LTa=4/5
LTb=2/5
LTc=-2/5
LTd=-4/5

#正12面体描写(原蹠から最初の隣点３個へ)
lines3d(c(portal_i,LNa_cos[1]),c(portal_j,LNa_sin[1]),c(portal_k,LTa),col=rgb(0,0,1),lwd=1)
lines3d(c(portal_i,LNa_cos[2]),c(portal_j,LNa_sin[2]),c(portal_k,LTa),col=rgb(0,0,1),lwd=1)
lines3d(c(portal_i,LNa_cos[3]),c(portal_j,LNa_sin[3]),c(portal_k,LTa),col=rgb(0,0,1),lwd=1)

#正12面体描写(対蹠から最初の隣点３個へ)
lines3d(c(antipordal_i,LNd_cos[1]),c(antipordal_j,LNd_sin[1]),c(antipordal_k,LTd),col=rgb(0,0,1),lwd=1)
lines3d(c(antipordal_i,LNd_cos[2]),c(antipordal_j,LNd_sin[2]),c(antipordal_k,LTd),col=rgb(0,0,1),lwd=1)
lines3d(c(antipordal_i,LNd_cos[3]),c(antipordal_j,LNd_sin[3]),c(antipordal_k,LTd),col=rgb(0,0,1),lwd=1)

#正12面体描写(原蹠からの最初の隣点３個から次の隣点６個へ)
lines3d(c(LNa_cos[1],LNb_cos[5]),c(LNa_sin[1],LNb_sin[5]),c(LTa,LTb),col=rgb(0,0,1),lwd=1)
lines3d(c(LNa_cos[1],LNb_cos[6]),c(LNa_sin[1],LNb_sin[6]),c(LTa,LTb),col=rgb(0,0,1),lwd=1)
lines3d(c(LNa_cos[2],LNb_cos[1]),c(LNa_sin[2],LNb_sin[1]),c(LTa,LTb),col=rgb(0,0,1),lwd=1)
lines3d(c(LNa_cos[2],LNb_cos[2]),c(LNa_sin[2],LNb_sin[2]),c(LTa,LTb),col=rgb(0,0,1),lwd=1)
lines3d(c(LNa_cos[3],LNb_cos[3]),c(LNa_sin[3],LNb_sin[3]),c(LTa,LTb),col=rgb(0,0,1),lwd=1)
lines3d(c(LNa_cos[3],LNb_cos[4]),c(LNa_sin[3],LNb_sin[4]),c(LTa,LTb),col=rgb(0,0,1),lwd=1)

#正12面体描写(原蹠からの次の隣点６個からの水平線３本)
lines3d(c(LNb_cos[2],LNb_cos[3]),c(LNb_sin[2],LNb_sin[3]),c(LTb,LTb),col=rgb(0,0,1),lwd=1)
lines3d(c(LNb_cos[4],LNb_cos[5]),c(LNb_sin[4],LNb_sin[5]),c(LTb,LTb),col=rgb(0,0,1),lwd=1)
lines3d(c(LNb_cos[6],LNb_cos[1]),c(LNb_sin[6],LNb_sin[1]),c(LTb,LTb),col=rgb(0,0,1),lwd=1)

#正12面体描写(対蹠からの最初の隣点３個から次の隣点６個へ)
lines3d(c(LNd_cos[1],LNc_cos[5]),c(LNd_sin[1],LNc_sin[5]),c(LTd,LTc),col=rgb(0,0,1),lwd=1)
lines3d(c(LNd_cos[1],LNc_cos[6]),c(LNd_sin[1],LNc_sin[6]),c(LTd,LTc),col=rgb(0,0,1),lwd=1)
lines3d(c(LNd_cos[2],LNc_cos[1]),c(LNd_sin[2],LNc_sin[1]),c(LTd,LTc),col=rgb(0,0,1),lwd=1)
lines3d(c(LNd_cos[2],LNc_cos[2]),c(LNd_sin[2],LNc_sin[2]),c(LTd,LTc),col=rgb(0,0,1),lwd=1)
lines3d(c(LNd_cos[3],LNc_cos[3]),c(LNd_sin[3],LNc_sin[3]),c(LTd,LTc),col=rgb(0,0,1),lwd=1)
lines3d(c(LNd_cos[3],LNc_cos[4]),c(LNd_sin[3],LNc_sin[4]),c(LTd,LTc),col=rgb(0,0,1),lwd=1)

#正12面体描写(対蹠からの次の隣点６個からの水平線３本)
lines3d(c(LNc_cos[2],LNc_cos[3]),c(LNc_sin[2],LNc_sin[3]),c(LTc,LTc),col=rgb(0,0,1),lwd=1)
lines3d(c(LNc_cos[4],LNc_cos[5]),c(LNc_sin[4],LNc_sin[5]),c(LTc,LTc),col=rgb(0,0,1),lwd=1)
lines3d(c(LNc_cos[6],LNc_cos[1]),c(LNc_sin[6],LNc_sin[1]),c(LTc,LTc),col=rgb(0,0,1),lwd=1)

#正12面体描写(原蹠からの経路と対蹠からの経路の結合線6本)
lines3d(c(LNb_cos[1],LNc_cos[4]),c(LNb_sin[1],LNc_sin[4]),c(LTb,LTc),col=rgb(0,0,1),lwd=1)
lines3d(c(LNb_cos[2],LNc_cos[5]),c(LNb_sin[2],LNc_sin[5]),c(LTb,LTc),col=rgb(0,0,1),lwd=1)
lines3d(c(LNb_cos[3],LNc_cos[6]),c(LNb_sin[3],LNc_sin[6]),c(LTb,LTc),col=rgb(0,0,1),lwd=1)
lines3d(c(LNb_cos[4],LNc_cos[1]),c(LNb_sin[4],LNc_sin[1]),c(LTb,LTc),col=rgb(0,0,1),lwd=1)
lines3d(c(LNb_cos[5],LNc_cos[2]),c(LNb_sin[5],LNc_sin[2]),c(LTb,LTc),col=rgb(0,0,1),lwd=1)
lines3d(c(LNb_cos[6],LNc_cos[3]),c(LNb_sin[6],LNc_sin[3]),c(LTb,LTc),col=rgb(0,0,1),lwd=1)

#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="~/Desktop/cube_with_dodecahedron02")
```
①まずは「正方形」の各辺に「二等辺三角形」と「長方形」が隣接する正十六角形(Regular Hexadecagon)をイメージする（あくまで射影なので、パースがついて形が多少崩れてても気にしない）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/752fb1b6-4f21-690c-5553-7f79e58f8ccb.png)

```R
#分割数Nod(Number of divide)=16
NoD<-16
#円周分割数列(Sequence of Divided Circumference)
SoDC<-seq(0,2*pi,length=NoD+1)
#円周上の四角形の頂点を集める。
cx_nomal=cos(SoDC)
cy_nomal=sin(SoDC)

#グラフ描画
plot(cx_nomal,cy_nomal,asp=1,col=rgb(0,0,0),type="l",xlim=c(-1,1),ylim=c(-1,1),main="Regular Hexadecagon",xlab="Cos(θ)",ylab="Sin(θ)",lwd=1.2)

#背景円の塗り潰し
Circumference<-seq(0,2*pi,length=60)
cx_circle=cos(Circumference)
cy_circle=sin(Circumference)
polygon(cx_circle, #x
cy_circle, #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=c(200,200,200)) 　#塗りつぶす色

#文字追加
text(cx_nomal,cy_nomal, labels=c("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p"),col=rgb(0,0,0))

#正方形塗り潰し
polygon(c(cx_nomal[1],cx_nomal[5],cx_nomal[9],cx_nomal[13],cx_nomal[1]), #x
c(cy_nomal[1],cy_nomal[5],cy_nomal[9],cy_nomal[13],cy_nomal[1]), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(0,1,0)) 　#塗りつぶす色

#分割三角形塗り潰し
polygon(c(cx_nomal[1],(cx_nomal[3]+cx_nomal[15])/2,cx_nomal[5],cx_nomal[1]), #x
c(cy_nomal[1],cy_nomal[3],cy_nomal[5],cy_nomal[1]), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(1,0,0)) 　#塗りつぶす色

polygon(c(cx_nomal[9],cx_nomal[11],cx_nomal[13],cx_nomal[9]), #x
c(cy_nomal[9],cy_nomal[11],cy_nomal[13],cy_nomal[9]), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(1,0,0)) 　#塗りつぶす色

#分割四角形塗り潰し
polygon(c(cx_nomal[5],cx_nomal[6],cx_nomal[8],cx_nomal[9],cx_nomal[5]), #x
c(cy_nomal[5],cy_nomal[6],cy_nomal[8],cy_nomal[9],cy_nomal[5]), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(0,0,1)) 　#塗りつぶす色

polygon(c(cx_nomal[13],cx_nomal[14],cx_nomal[16],cx_nomal[1],cx_nomal[13]), #x
c(cy_nomal[13],cy_nomal[14],cy_nomal[16],cy_nomal[1],cy_nomal[13]), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(0,0,1)) 　#塗りつぶす色
```
次いで「正方形」表面上にこの「二等辺三角形」と「長方形」のイメージを射影すると、この二つが合体して「(同一平面上の)正五角形」を構成する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/1008208a-a7fd-1399-b55a-fb75fa8db5b5.png)

```R
#分割数Nod(Number of divide)=16
NoD<-16
#円周分割数列(Sequence of Divided Circumference)
SoDC<-seq(0,2*pi,length=NoD+1)
#円周上の四角形の頂点を集める。
cx_nomal=cos(SoDC)
cy_nomal=sin(SoDC)

#グラフ描画
plot(cx_nomal,cy_nomal,asp=1,col=rgb(0,0,0),type="l",xlim=c(-1,1),ylim=c(-1,1),main="Regular Hexadecagon",xlab="Cos(θ)",ylab="Sin(θ)",lwd=1.2)

#背景円の塗り潰し
Circumference<-seq(0,2*pi,length=60)
cx_circle=cos(Circumference)
cy_circle=sin(Circumference)
polygon(cx_circle, #x
cy_circle, #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=c(200,200,200)) 　#塗りつぶす色

#文字追加
text(cx_nomal,cy_nomal, labels=c("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p"),col=rgb(0,0,0))

#分割三角形塗り潰し
polygon(c(cx_nomal[1],cx_nomal[3],cx_nomal[5],cx_nomal[1]), #x
c(cy_nomal[1],cy_nomal[3],cy_nomal[5],cy_nomal[1]), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(1,0,0)) 　#塗りつぶす色

polygon(c(cx_nomal[9],cx_nomal[11],cx_nomal[13],cx_nomal[9]), #x
c(cy_nomal[9],cy_nomal[11],cy_nomal[13],cy_nomal[9]), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(1,0,0)) 　#塗りつぶす色

#分割四角形塗り潰し
polygon(c(cx_nomal[5],cx_nomal[6],cx_nomal[8],cx_nomal[9],cx_nomal[5]), #x
c(cy_nomal[5],cy_nomal[6],cy_nomal[8],cy_nomal[9],cy_nomal[5]), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(0,0,1)) 　#塗りつぶす色

polygon(c(cx_nomal[13],cx_nomal[14],cx_nomal[16],cx_nomal[1],cx_nomal[13]), #x
c(cy_nomal[13],cy_nomal[14],cy_nomal[16],cy_nomal[1],cy_nomal[13]), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(0,0,1)) 　#塗りつぶす色

#「射影された」分割三角形塗り潰し
polygon(c(cx_nomal[5],cx_nomal[9],cx_nomal[6],cx_nomal[5]), #x
c(cy_nomal[5],cy_nomal[9],cy_nomal[8],cy_nomal[5]), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(1,0,0)) 　#塗りつぶす色

polygon(c(cx_nomal[13],cx_nomal[1],cx_nomal[14],cx_nomal[13]), #x
c(cy_nomal[13],cy_nomal[1],cy_nomal[16],cy_nomal[13]), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(1,0,0)) 　#塗りつぶす色

#「射影された」分割四角形塗り潰し
polygon(c(cx_nomal[1],cx_nomal[5],cx_nomal[6],cx_nomal[14],cx_nomal[1]), #x
c(cy_nomal[1],cy_nomal[5],cy_nomal[8],cy_nomal[16],cy_nomal[1]), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(0,0,1)) 　#塗りつぶす色

polygon(c(cx_nomal[9],cx_nomal[13],cx_nomal[14],cx_nomal[6],cx_nomal[9]), #x
c(cy_nomal[9],cy_nomal[13],cy_nomal[16],cy_nomal[8],cy_nomal[9]), #y
density=c(30), #塗りつぶす濃度
angle=c(45),　 　　　#塗りつぶす斜線の角度
col=rgb(0,0,1)) 　#塗りつぶす色

#補助線(X軸とY軸)
segments(-1,0,1,0,lty=3,col=rgb(0,0,0))
segments(0,-1,0,1,lty=3,col=rgb(0,0,0))

#「分割三角形」を巡る補助線と横罫線
segments(cx_nomal[3],cy_nomal[3],cx_nomal[11],cy_nomal[11],lty=3,col=rgb(0,0,0))

segments(cx_nomal[2],cy_nomal[2],cx_nomal[8],cy_nomal[8],lty=3,col=rgb(0,0,0))
segments(cx_nomal[3],cy_nomal[3],cx_nomal[7],cy_nomal[7],lty=3,col=rgb(0,0,0))
segments(cx_nomal[4],cy_nomal[4],cx_nomal[6],cy_nomal[6],lty=3,col=rgb(0,0,0))

segments(cx_nomal[10],cy_nomal[10],cx_nomal[16],cy_nomal[16],lty=3,col=rgb(0,0,0))
segments(cx_nomal[11],cy_nomal[11],cx_nomal[15],cy_nomal[15],lty=3,col=rgb(0,0,0))
segments(cx_nomal[12],cy_nomal[12],cx_nomal[14],cy_nomal[14],lty=3,col=rgb(0,0,0))

#「分割四角形」を巡る補助線と縦罫線
segments(cx_nomal[7],cy_nomal[7],cx_nomal[15],cy_nomal[15],lty=3,col=rgb(0,0,0))

segments(cx_nomal[2],cy_nomal[2],cx_nomal[16],cy_nomal[16],lty=3,col=rgb(0,0,0))
segments(cx_nomal[3],cy_nomal[3],cx_nomal[15],cy_nomal[15],lty=3,col=rgb(0,0,0))
segments(cx_nomal[4],cy_nomal[4],cx_nomal[14],cy_nomal[14],lty=3,col=rgb(0,0,0))

segments(cx_nomal[6],cy_nomal[6],cx_nomal[12],cy_nomal[12],lty=3,col=rgb(0,0,0))
segments(cx_nomal[7],cy_nomal[7],cx_nomal[11],cy_nomal[11],lty=3,col=rgb(0,0,0))
segments(cx_nomal[8],cy_nomal[8],cx_nomal[10],cy_nomal[10],lty=3,col=rgb(0,0,0))
```
「正四面体から立方体を構成する過程」同様、まるで魔法の様ですね。古典時代の幾何学者達は実際に模型を制作して確かめる形でこうした連鎖を研究してきたのです。そしてさらにそうやって構成される(対角線の数が5本の)正十二面体の相対を取ると(対角線の数が６本の)正二十面体が構成される事になります。
![68747470733a2f2f63646e2d616b2e662e73742d686174656e612e636f6d2f696d616765732f666f746f6c6966652f6f2f6f6368696d7573686130312f32303231303132352f32303231303132353136323933382e676966.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/82b42599-8bf5-13d0-3db8-5b0288bbaa47.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,")" main="Cross section for ")

#対蹠表示
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)座標

#最初の頂点３個x2
LN01=sin(1/3*pi)
c0<-seq(0,2*pi,length=6)

#頭蹠側一段目5個
LNa_cos<-cos(c0)*LN01
LNa_sin<-sin(c0)*LN01

#対蹠側一段目5個
LNb_cos<-cos(c0+pi)*LN01
LNb_sin<-sin(c0+pi)*LN01

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

#正12面体描写(原蹠から最初の隣点5個へ)
lines3d(c(portal_i,LNa_cos[1]),c(portal_j,LNa_sin[1]),c(portal_k,LTa),col=rgb(0,0,0),lwd=1)
lines3d(c(portal_i,LNa_cos[2]),c(portal_j,LNa_sin[2]),c(portal_k,LTa),col=rgb(0,0,0),lwd=1)
lines3d(c(portal_i,LNa_cos[3]),c(portal_j,LNa_sin[3]),c(portal_k,LTa),col=rgb(0,0,0),lwd=1)
lines3d(c(portal_i,LNa_cos[4]),c(portal_j,LNa_sin[4]),c(portal_k,LTa),col=rgb(0,0,0),lwd=1)
lines3d(c(portal_i,LNa_cos[5]),c(portal_j,LNa_sin[5]),c(portal_k,LTa),col=rgb(0,0,0),lwd=1)

#正20面体描写(原蹠からの次の隣点5個からの水平線5本)
lines3d(c(LNa_cos[1],LNa_cos[2]),c(LNa_sin[1],LNa_sin[2]),c(LTa,LTa),col=rgb(0,0,0),lwd=1)
lines3d(c(LNa_cos[2],LNa_cos[3]),c(LNa_sin[2],LNa_sin[3]),c(LTa,LTa),col=rgb(0,0,0),lwd=1)
lines3d(c(LNa_cos[3],LNa_cos[4]),c(LNa_sin[3],LNa_sin[4]),c(LTa,LTa),col=rgb(0,0,0),lwd=1)
lines3d(c(LNa_cos[4],LNa_cos[5]),c(LNa_sin[4],LNa_sin[5]),c(LTa,LTa),col=rgb(0,0,0),lwd=1)
lines3d(c(LNa_cos[5],LNa_cos[1]),c(LNa_sin[5],LNa_sin[1]),c(LTa,LTa),col=rgb(0,0,0),lwd=1)

#正20面体描写(対蹠から最初の隣点5個へ)
lines3d(c(antipordal_i,LNb_cos[1]),c(antipordal_j,LNb_sin[1]),c(antipordal_k,LTb),col=rgb(0,0,0),lwd=1)
lines3d(c(antipordal_i,LNb_cos[2]),c(antipordal_j,LNb_sin[2]),c(antipordal_k,LTb),col=rgb(0,0,0),lwd=1)
lines3d(c(antipordal_i,LNb_cos[3]),c(antipordal_j,LNb_sin[3]),c(antipordal_k,LTb),col=rgb(0,0,0),lwd=1)
lines3d(c(antipordal_i,LNb_cos[4]),c(antipordal_j,LNb_sin[4]),c(antipordal_k,LTb),col=rgb(0,0,0),lwd=1)
lines3d(c(antipordal_i,LNb_cos[5]),c(antipordal_j,LNb_sin[5]),c(antipordal_k,LTb),col=rgb(0,0,0),lwd=1)

#正20面体描写(原蹠からの次の隣点5個からの水平線5本)
lines3d(c(LNb_cos[1],LNb_cos[2]),c(LNb_sin[1],LNb_sin[2]),c(LTb,LTb),col=rgb(0,0,0),lwd=1)
lines3d(c(LNb_cos[2],LNb_cos[3]),c(LNb_sin[2],LNb_sin[3]),c(LTb,LTb),col=rgb(0,0,0),lwd=1)
lines3d(c(LNb_cos[3],LNb_cos[4]),c(LNb_sin[3],LNb_sin[4]),c(LTb,LTb),col=rgb(0,0,0),lwd=1)
lines3d(c(LNb_cos[4],LNb_cos[5]),c(LNb_sin[4],LNb_sin[5]),c(LTb,LTb),col=rgb(0,0,0),lwd=1)
lines3d(c(LNb_cos[5],LNb_cos[1]),c(LNb_sin[5],LNb_sin[1]),c(LTb,LTb),col=rgb(0,0,0),lwd=1)

#正20面体描写(原蹠からの経路と対蹠からの経路の結合線10本)
lines3d(c(LNa_cos[1],LNb_cos[4]),c(LNa_sin[1],LNb_sin[4]),c(LTa,LTb),col=rgb(0,0,0),lwd=1)
lines3d(c(LNa_cos[1],LNb_cos[3]),c(LNa_sin[1],LNb_sin[3]),c(LTa,LTb),col=rgb(0,0,0),lwd=1)
lines3d(c(LNa_cos[5],LNb_cos[3]),c(LNa_sin[5],LNb_sin[3]),c(LTa,LTb),col=rgb(0,0,0),lwd=1)
lines3d(c(LNa_cos[5],LNb_cos[2]),c(LNa_sin[5],LNb_sin[2]),c(LTa,LTb),col=rgb(0,0,0),lwd=1)
lines3d(c(LNa_cos[4],LNb_cos[2]),c(LNa_sin[4],LNb_sin[2]),c(LTa,LTb),col=rgb(0,0,0),lwd=1)
lines3d(c(LNa_cos[4],LNb_cos[1]),c(LNa_sin[4],LNb_sin[1]),c(LTa,LTb),col=rgb(0,0,0),lwd=1)
lines3d(c(LNa_cos[3],LNb_cos[1]),c(LNa_sin[3],LNb_sin[1]),c(LTa,LTb),col=rgb(0,0,0),lwd=1)
lines3d(c(LNa_cos[3],LNb_cos[5]),c(LNa_sin[3],LNb_sin[5]),c(LTa,LTb),col=rgb(0,0,0),lwd=1)
lines3d(c(LNa_cos[2],LNb_cos[5]),c(LNa_sin[2],LNb_sin[5]),c(LTa,LTb),col=rgb(0,0,0),lwd=1)
lines3d(c(LNa_cos[2],LNb_cos[4]),c(LNa_sin[2],LNb_sin[4]),c(LTa,LTb),col=rgb(0,0,0),lwd=1)

立方体角線
lines3d(c(LNa_cos[1],LNb_cos[1]),c(LNa_sin[1],LNb_sin[1]),c(LTa,LTb),col=rgb(0,1,0),lwd=1)
lines3d(c(LNa_cos[2],LNb_cos[2]),c(LNa_sin[2],LNb_sin[2]),c(LTa,LTb),col=rgb(0,1,0),lwd=1)
lines3d(c(LNa_cos[3],LNb_cos[3]),c(LNa_sin[3],LNb_sin[3]),c(LTa,LTb),col=rgb(0,1,0),lwd=1)
lines3d(c(LNa_cos[4],LNb_cos[4]),c(LNa_sin[4],LNb_sin[4]),c(LTa,LTb),col=rgb(0,1,0),lwd=1)
lines3d(c(LNa_cos[5],LNb_cos[5]),c(LNa_sin[5],LNb_sin[5]),c(LTa,LTb),col=rgb(0,1,0),lwd=1)

#アニメーション
movie3d(spin3d(axis=c(0,0,1),rpm=5),duration=10,fps=25,movie="~/Desktop/icosahedron001")
```
微分積分に立脚する解析学や行列計算に立脚する線形代数が主力となり、機械学習分野が台頭した今日ではほとんど振り返られる事のなくなった古典的数学の領域ですね。それが確認出来た時点で以下続報…