Icosahedral symmetry
The icosahedral rotation group is of order 60.
This worksheet is a part of Nexorade: work doc
Move the Red point.
Setup
ϕ = (1+sqrt(5))/2
# 60 elements of Icosahedral symmetry: 60 Rotation matrices
#==========================================================
Mrz = {{1,(ϕ-1),0}*sqrt((ϕ+1)/(ϕ+2)),{-(ϕ-1),1,0}*sqrt((ϕ+1)/(ϕ+2)),{0,0,1}}
LA3 = zip(Invert(Mrz)*{{1,0,0},{0,cos(α),-sin(α)},{0,sin(α),cos(α)}}*Mrz, α,{1,2,3}*72°)
LM3 = {{{1,0,0},{0,1,0},{0,0,1}},{{0,0,1},{1,0,0},{0,1,0}},{{0,1,0},{0,0,1},{1,0,0}}}
LM30= Join({LM3, Join(Zip(Join(Zip(LM3*A3, A3,LA3))*M3, M3,LM3))})
MrO = {{-1,0,0},{0,-1,0},{0,0,-1}}*Invert(LA3(1))*{{1,0,0},{0,-1,0},{0,0,1}}*LA3(1)
LM60= Join({LM30,Reverse(LM30 MrO)})
# Draw spherical icosaeder
#========================================
arc = CircularArc((0,0,0), (1,0,ϕ)/sqrt(ϕ+2), (0,ϕ,1)/sqrt(ϕ+2) )
tri = Zip(ApplyMatrix(M, arc), M, LM3)
icosi = Zip(ApplyMatrix(M, arc), M, LM60)
O = (0, 0, 0)
sph = Sphere(O,1)
cX = Circle(O,1,xAxis)
cY = Circle(O,1,yAxis)
cZ = Circle(O,1,zAxis)
Mi = (1,1,1)/sqrt(3)
M3Axis= Line(O,Mi)
Ai = (0,ϕ,1)/sqrt(ϕ+2)
Bi = (1,0,ϕ)/sqrt(ϕ+2)
Ci = (ϕ,1,0)/sqrt(ϕ+2)
A5Axis = Line(O,Ai)
B5Axis = Line(O,Bi)
C5Axis = Line(O,Ci)
a2Axis = Line(O,Midpoint(Bi,Ci))
b2Axis = Line(O,Midpoint(Ci,Ai))
c2Axis = Line(O,Midpoint(Ai,Bi))
# Draw test point
#========================================
P = PointIn(Sphere(O,1))
P60 = Zip(ApplyMatrix(M, P), M, LM60)
#========================================================
# Settings
#========================================================
SetActiveView(-1)
SetBackgroundColor("#F0F0F0")
ShowAxes(false)
ShowGrid(false)
CenterView(O)
SetActiveView(1)
ShowAxes(false)
ShowGrid(false)
CenterView(O)
#========================================================
# Properties
#========================================================
#--- Visibility ---#
List={cX,cY,cZ,tri,M3Axis,A5Axis,B5Axis,C5Axis,a2Axis,b2Axis,c2Axis}
onSymm = CheckBox("Symmetry",List)
SetValue(onSymm,false)
List={"Mi","Ai","Bi","Ci","arc"}
Execute(Zip("SetConditionToShowObject("+obj+",onSymm)", obj,List))
onIcosi= CheckBox("Icosi",{icosi})
List={"O","Ci","cZ","C5Axis","icosi","P","P60"}
Execute(Zip("SetVisibleInView("+obj+",1,false)", obj,List))
#--- Color, Filling and Label ---#
SetColor(sph,"White")
SetFilling(sph,1)
Black="Black"
List={"O","Mi","M3Axis","arc","tri","icosi","P60"}
Execute(Zip("SetColor("+obj+","+Black+")", obj,List))
Execute(Zip("ShowLabel("+obj+",false)", obj,List))
Red="Red"
List={"cX","Ai","A5Axis","a2Axis","P"}
Execute(Zip("SetColor("+obj+","+Red+")", obj,List))
Execute(Zip("ShowLabel("+obj+",false)", obj,List))
Green="Green"
List={"cY","Bi","B5Axis","b2Axis"}
Execute(Zip("SetColor("+obj+","+Green+")", obj,List))
Execute(Zip("ShowLabel("+obj+",false)", obj,List))
Blue="Blue"
List={"cZ","Ci","C5Axis","c2Axis"}
Execute(Zip("SetColor("+obj+","+Blue+")", obj,List))
Execute(Zip("ShowLabel("+obj+",false)", obj,List))
#--- LineThickness ---#
List={"cX","cY","cZ","M3Axis","a2Axis","b2Axis","c2Axis","A5Axis","B5Axis","C5Axis"}
Execute(Zip("SetLineThickness("+obj+",3)", obj,List))
List={"arc","tri","icosi"}
Execute(Zip("SetLineThickness("+obj+",2)", obj,List))
#--- PointSize ---#
List={"O","Mi","Ai","Bi","Ci","P60"}
Execute(Zip("SetPointSize("+obj+",2)", obj,List))
List={"Black","Red","Green","Blue","List"}
Execute(Zip("Delete("+obj+")", obj,List))