【オイラーの多面体定理と正多面体】正20面体(Regular Icosahedron)の作図について。

[【Rで球面幾何学】正方形における平方対角線(Square diagonal)と立方体における立方対角線(Cubic diagonal)の関係について。](https://qiita.com/ochimusha01/items/9d899779ff8e814beb41)
![square002.gif](https://camo.qiitausercontent.com/d22d8f6d1ec3e22c3b97c0bd315c47cb9f2130be/68747470733a2f2f71696974612d757365722d636f6e74656e74732e696d6769782e6e65742f687474707325334125324625324663646e2d616b2e662e73742d686174656e612e636f6d253246696d61676573253246666f746f6c6966652532466f2532466f6368696d757368613031253246323032303131323125324632303230313132313232333032322e6769663f69786c69623d72622d312e322e32266175746f3d666f726d6174266769662d713d363026713d373526773d31343030266669743d6d617826733d3366333130356661323837303932383235623339623735666137613336663231)
この考え方を応用すると**正20面体**(<font color="blue">Regular Icosahedron</font>)の作図が可能となります。
[正二十面体 - Wikipedia](https://ja.wikipedia.org/wiki/%E6%AD%A3%E4%BA%8C%E5%8D%81%E9%9D%A2%E4%BD%93)
![icosahedron009.gif](https://cdn-ak.f.st-hatena.com/images/fotolife/o/ochimusha01/20210125/20210125162559.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)

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

ちなみ正二十面体には立方体角線=対蹠のセットが他に5個あり、どれを選んでも同じ結果となります。
![icosahedron001.gif](https://cdn-ak.f.st-hatena.com/images/fotolife/o/ochimusha01/20210125/20210125162938.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")
```

**双対**（<font color="blue">Duality</font>）…(<font color="blue">それぞれ五方向に伸びる</font>)**頂点**と(<font color="blue">それぞれ三角形を成す</font>)**面**の関係を入れ替えると**正十二面体**(<font color="blue">Regular Dodecahedron</font>)になります。
[【Rで球面幾何学】正12面体(Regular Dodecahedron)の作図について。](https://qiita.com/ochimusha01/items/9ce61d7d5a9227235b1e)
![dodecahedron051.gif](https://cdn-ak.f.st-hatena.com/images/fotolife/o/ochimusha01/20210125/20210125160959.gif)
以下続報…