【Rで球面幾何学】正方形における平方対角線(Square diagonal)と立方体における立方対角線(Cubic diagonal)の関係について。
この考え方を応用すると正20面体(Regular Icosahedron)の作図が可能となります。
正二十面体 - Wikipedia
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)座標
#最初の頂点3個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個あり、どれを選んでも同じ結果となります。
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)座標
#最初の頂点3個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")
双対(Duality)…(それぞれ五方向に伸びる)頂点と(それぞれ三角形を成す)面の関係を入れ替えると正十二面体(Regular Dodecahedron)になります。
【Rで球面幾何学】正12面体(Regular Dodecahedron)の作図について。
以下続報…