Nex63 (6,3) - Rotegrity
Setup Scripting
Create LM60
#==========================================================
# 60 elements of Icosahedral symmetry: 60 Rotation matrices
#==========================================================
ζ = angle((1,0,0),(0,0,0),(1+sqrt(5),2,0))
SetConditionToShowObject(ζ,false)
Mζ = {{cos(ζ),sin(ζ),0},{-sin(ζ),cos(ζ),0},{0,0,1}}
Lα = {1,2,3}*72°
LA3 = zip(Invert(Mζ)*{{1,0,0},{0,cos(α),-sin(α)},{0,sin(α),cos(α)}}*Mζ,α,Lα)
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)})
SetUp Bands
#========================================================
# Rotegrity 3v{3,0} : 270 Bands
# https://www.deviantart.com/taffgoch/art/Rotegrity-3v-0-3-625452129
# https://groups.google.com/g/geodesichelp/c/RFBZ6uFmsjU/m/QfiMqboLBAAJ
#
# 5 * 12 (vertices) = 60 Red bands
# 5 * 12 (vertices) = 60 Green bands
# 6 * 20 (triangles)= 120 Blue bands (60 Blue + 60 Cyan)
# 1 * 30 (edges) = 30 Yellow bands
#========================================================
ϕ = (1+sqrt(5))/2
Bi = (1,0,ϕ)/sqrt(ϕ+2)
Ci = (ϕ,1,0)/sqrt(ϕ+2)
C5Axis = Line(O,Ci)
red = 0.132549689951321
green = 0.153966415801835
blue = 0.158785990386417
yellow = 0.156558417905753
#========================================================
# First create the RGBCY bandpoints
# with center Red-pentagon on (0,0,1)
#========================================================
#--------------------------------------------------------
# Red Band
#--------------------------------------------------------
angZ= -asin(sqrt((1-cos(red)) / (1-cos(72°))))
vR1 = Vector(Rotate(Ci,angZ,zAxis))
vR2 = Rotate(vR1, -72°, C5Axis)
AxisR = Line(O, Vector(vR1 ⊗ vR2))
LvR = Sequence(Rotate(vR1, k*red, AxisR), k,0,3)
LpR = Zip(Point(O,v), v, LvR)
#--------------------------------------------------------
# Green Band
#--------------------------------------------------------
vG1 = Rotate(Vector(O,LpR(3)),-72°, C5Axis)
vG3 = Vector(O,LpR(4))
AxisG = Line(O, Vector(vG1 ⊗ vG3))
LvG = Sequence(Rotate(vG1, k*green, AxisG), k,0,3)
LpG = Zip(Point(O,v), v, LvG)
#========================================================
# Spherical trigonometry : Cosine rules
# https://en.wikipedia.org/wiki/Spherical_trigonometry
#--------------------------------------------------------
# cos(A) = ( cos(a) - cos(b)*cos(c) ) / ( sin(b)*sin(c) )
#========================================================
hg = 2*green
hb = 2*blue
hB = acos( (cos(hb)-cos(hb)*cos(hg)) / (sin(hb)*sin(hg)) )
#--------------------------------------------------------
# Blue Band
#--------------------------------------------------------
vB1 = Vector(O,LpG(2))
vB2 = Rotate(vG3,-hB, Line(O,LpG(2)))
AxisB = Line(O, Vector(vB1 ⊗ vB2))
LvB = Sequence(Rotate(vB1, k*blue, AxisB), k,0,3)
LpB = Zip(Point(O,v), v, LvB)
#--------------------------------------------------------
# Cyan Band (Second blue)
#--------------------------------------------------------
vC1 = Vector(O,LpB(3))
vC3 = Vector(O,LpG(4))
AxisC = Line(O, Vector(vC1 ⊗ vC3))
LvC = Sequence(Rotate(vC1, k*blue, AxisC), k,0,3)
LpC = Zip(Point(O,v), v, LvC)
#--------------------------------------------------------
# yellow Band
#--------------------------------------------------------
vY1 = Rotate(Vector(O,LpB(2)),72°, C5Axis)
vY2 = Vector(O,LpC(4))
AxisY = Line(O, Vector(vY1 ⊗ vY2))
LvY = Sequence(Rotate(vY1, k*yellow, AxisY), k,0,3)
LpY = Zip(Point(O,v), v, LvY)
#========================================================
# Rotate all Band points to Icosahedron orientation
# conform Cubic system
#========================================================
Ymid= Rotate(LpY(1), 1.5yellow, AxisY)
angC = Angle(Plane(O,Ci,Bi),Plane(O,Ci,Ymid))
LR = Rotate(LpR, angC, C5Axis)
LG = Rotate(LpG, angC, C5Axis)
LB = Rotate(LpB, angC, C5Axis)
LC = Rotate(LpC, angC, C5Axis)
LY = Rotate(LpY, angC, C5Axis)
#========================================================
# Create sphere
#========================================================
Rarc = CircularArc(O, LR(1), LR(4), Plane(O, Ci, Bi))
Garc = CircularArc(O, LG(1), LG(4), Plane(O, Ci, Bi))
Barc = CircularArc(O, LB(1), LB(4), Plane(O, Ci, Bi))
Carc = CircularArc(O, LC(1), LC(4), Plane(O, Ci, Bi))
Yarc = CircularArc(O, LY(1), LY(4), Plane(O, Ci, Bi))
Rarc60 = Zip(ApplyMatrix(M,Rarc), M,LM60)
Garc60 = Zip(ApplyMatrix(M,Garc), M,LM60)
Barc60 = Zip(ApplyMatrix(M,Barc), M,LM60)
Carc60 = Zip(ApplyMatrix(M,Carc), M,LM60)
Yarc60 = Zip(ApplyMatrix(M,Yarc), M,LM60)
#========================================================
# Properties
#========================================================
#--- Color, and Label ---#
Red = "Red"
Green = "Green"
Blue = "Blue"
Cyan = "Cyan"
Yellow= "Yellow"
SetColor(Rarc60,"Red")
SetColor(Garc60,"Green")
SetColor(Barc60,"Blue")
SetColor(Carc60,"Cyan")
SetColor(Yarc60,"Yellow")
#--- Visibility en Color ---#
List={"Bi","Ci","C5Axis"}
Execute(Zip("SetConditionToShowObject("+obj+",false)", obj,List))
List={"vR1","vR2","AxisR","LvR","LpR","LR","Rarc","angC"}
Execute(Zip("SetConditionToShowObject("+obj+",false)", obj,List))
Execute(Zip("SetColor("+obj+","+Red+")", obj,List))
List={"vG1","vG3","AxisG","LvG","LpG","LG","Garc"}
Execute(Zip("SetConditionToShowObject("+obj+",false)", obj,List))
Execute(Zip("SetColor("+obj+","+Green+")", obj,List))
List={"vB1","vB2","AxisB","LvB","LpB","LB","Barc"}
Execute(Zip("SetConditionToShowObject("+obj+",false)", obj,List))
Execute(Zip("SetColor("+obj+","+Blue+")", obj,List))
List={"vC1","vC3","AxisC","LvC","LpC","LC","Carc"}
Execute(Zip("SetConditionToShowObject("+obj+",false)", obj,List))
Execute(Zip("SetColor("+obj+","+Cyan+")", obj,List))
List={"vY1","vY2","AxisY","LvY","LpY","LY","Yarc","Ymid"}
Execute(Zip("SetConditionToShowObject("+obj+",false)", obj,List))
Execute(Zip("SetColor("+obj+","+Yellow+")", obj,List))
List={"Red", "Green", "Blue", "Cyan", "Yellow", "List"}
Execute(Zip("Delete("+obj+")", obj,List))
Setup Sphere
#======================================
# SetUp Sphere: 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)
ϕ = (1+sqrt(5))/2
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))
arc = CircularArc(O,Bi,Ai)
icosi = Zip(ApplyMatrix(M, arc), M, LM60)
#========================================================
# Settings
#========================================================
SetActiveView(-1)
SetBackgroundColor("#202020")
ShowAxes(false)
ShowGrid(false)
CenterView(O)
SetActiveView(1)
ShowAxes(false)
ShowGrid(false)
CenterView(O)
#========================================================
# Properties
#========================================================
#--- Visibility ---#
List={"O","Ai","Bi","Ci","Mi","arc"}
Execute(Zip("SetConditionToShowObject("+obj+",false)", obj,List))
onIcosi= Checkbox("Icosaeder",{icosi})
List={cX,cY,cZ, M3Axis, A5Axis,B5Axis,C5Axis, a2Axis,b2Axis,c2Axis}
onSymm = Checkbox("Symmetry",List)
SetValue(onSymm,false)
List={"O","Ci","cZ","C5Axis","icosi"}
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","icosi"}
Execute(Zip("SetColor("+obj+","+Black+")", obj,List))
Execute(Zip("ShowLabel("+obj+",false)", obj,List))
Red="Red"
List={"cX","Ai","A5Axis","a2Axis"}
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","icosi"}
Execute(Zip("SetLineThickness("+obj+",2)", obj,List))
#--- PointSize ---#
List={"O","Mi","Ai","Bi","Ci"}
Execute(Zip("SetPointSize("+obj+",2)", obj,List))
List={"Black","Red","Green","Blue","List"}
Execute(Zip("Delete("+obj+")", obj,List))
SetUp Struts
#========================================================
# LsFree strut-points : list dimension (5,2)
# LnFree nexor-points : list dimension (5,4,2)
#--------------------------------------------------------
# Needed Axes: C5Axis M3Axis a2Axis
# Bandpointlists: LR LG LB LC LY
#========================================================
LRs = {LR(1),LR(4)}
LGs = {LG(1),LG(4)}
LBs = {LB(1),LB(4)}
LCs = {LC(1),LC(4)}
LYs = {LY(1),LY(4)}
LRa = Rotate(LRs, 72°, C5Axis)
LRb = Reverse(Rotate(LRs,-72°, C5Axis))
LRc = Rotate(LGs, 72°, C5Axis)
LRd = LGs
LGa = Reverse(Rotate(LRs,-72°, C5Axis))
LGb = Reverse(LBs)
LGc = Reverse(LRs)
LGd = LCs
LBa = LGs
LBb = Reverse(Rotate(LYs,-72°, C5Axis))
LBc = LCs
LBd = Reverse(Rotate(LCs,120°, M3Axis))
LCa = Reverse(LBs)
LCb = Rotate(LBs, -120°, M3Axis)
LCc = Reverse(LGs)
LCd = Reverse(LYs)
LYa = Rotate(LBs, 72°, C5Axis)
LYb = LCs
LYc = Reverse(Rotate(LYb,180°, a2Axis))
LYd = Reverse(Rotate(LYa,180°, a2Axis))
LRn = {LRa, LRb, LRc, LRd}
LGn = {LGa, LGb, LGc, LGd}
LBn = {LBa, LBb, LBc, LBd}
LCn = {LCa, LCb, LCc, LCd}
LYn = {LYa, LYb, LYc, LYd}
LsFree = CopyFreeObject({LRs,LGs,LBs,LCs,LYs})
LnFree = CopyFreeObject({LRn,LGn,LBn,LCn,LYn})
List={"LRs", "LGs", "LBs", "LCs","LYs", "List"}
Execute(Zip("Delete("+obj+")", obj,List))