## tetra_face_symm10.slf # interactive "play-ground" for testing the color assignment constraints # in the 600-Cell Hamiltonian triangle strip loops. # CHS 2008/4/18 ## SPECS FOR THE 600 CELL # 120 vertices (icosahedral), shared by 12 edges and 20 triangles # 720 edges, shared by 5 tetrahedra # 1200 triangular faces # 600 tetrahedral cells. ## GOAL #1: # Make 10 triangle-strip loops of 120 tringles; each touching every vertex once. # The most regular projection of the 600 Cell into 3D has tetrahedral symmetry, # -- not 10-fold symmetry; thus the 10 strips cannot possibly all be congruent! # But perhaps the first 4 strips (=GROUP A) can be identical and transform into one another # in the same way that the 4 vertices (or 4 faces) of a tetrahedron transform into one another. # Perhaps we can then make the other 6 of them also congruent and have them transform into one another # in the same way that the 6 edges of a tetrahedron transform into one another (= GROUP B). ## STEP 1: -- Identify the groups of sibling faces. # Some triangles are parallel to the tetrahedron faces and symmetrical with respect to the C3 axes; # There are always 4 siblings of this kind; thus they must belong to Group A. # Some triangles are associated with the edges of the tetrahedron faces and symmetrical with respect to the C2 axes; # There are always 6 siblings of this kind; thus they must belong to Group B. # Most faces come in sets of 12 equivalent siblings that transform into one another using all 12 tetrahedral symmetries. # These faces (=GROUP C) could be associated with either the strips of Group A or of Group B. ## NOTE: The rules above do not imply anything concerning the symmetries of the individual paths ! # (... as we erroneously assumed in earlier discussions!). ## EXPLORE: the Symmetries and Face Groupings: # This SLF file contains faces of all of the above types of tiles. # The faces of Group A are assigned the colors: White, Lemon, Orange, Purple. # The faces of Group B are assigned the colors: Red, Yellow, Green, Cyan, Blue, Magenta. # Sliders have been provided to do rotations around all seven symmetry axes. ## Study how the faces of Group C can be split into either 2 sets of 6 faces that go with Group B, # or into 3 sets of 4 faces that go with Group A. # ==> see below in the various (* blocked out *) code sections. #################################################################################################### tclinit { set winName .slfWindow source SLIDEUI.tcl source MATH.tcl } ### ROTATION SLIDERS ################### tclinit { proc CreateTopo { parent name } { set subname "slf_[subst $name]" if { $parent == {} } { set root .$subname } elseif { $parent == "." } { set root .$subname } else { set root $parent.$subname } toplevel $root set rx [CreateScale $name $root rx "rot_X 180" 0 0 180 180 1 horizontal] set ry [CreateScale $name $root ry "rot_Y 180" 0 0 180 180 1 horizontal] set rz [CreateScale $name $root rz "rot_Z 180" 0 0 180 180 1 horizontal] set r111 [CreateScale $name $root r111 "r_111 120" 0 0 360 120 1 horizontal] set r1nn [CreateScale $name $root r1nn "r_1nn 120" 0 0 360 120 1 horizontal] set rn1n [CreateScale $name $root rn1n "r_n1n 120" 0 0 360 120 1 horizontal] set rnn1 [CreateScale $name $root rnn1 "r_nn1 120" 0 0 360 120 1 horizontal] pack $rx $ry $rz $r111 $r1nn $rn1n $rnn1 -side top -fill x } CreateTopo $winName topo } ################################################################ # GROUP B surface R color (1 0.1 0) endsurface surface Y color (1 1 0) endsurface surface G color (0 0.9 0.1) endsurface surface C color (0 1 1) endsurface surface B color (0.1 0.3 1) endsurface surface M color (0.8 0 1) endsurface # GROUP A surface W color (1 1 0.9) endsurface surface O color (1 0.6 0.2) endsurface surface P color (0.5 0.3 1) endsurface surface L color (0.7 1 0.4) endsurface ## Complement colors are: R-C; Y-B; G-M. point EP ( 1 1 1 ) endpoint point EM ( 0 0 0.7 ) endpoint #Edge-Faces -- Group B point EN (-1 -1 1 ) endpoint face ef (EP EM EN) endface face ef_ (EN EM EP) endface object Efaces (ef ef_) endobject #Edge-Faces -- Group B point F1 ( 0.1 0.4 0.4 ) endpoint point F2 ( 0.4 0.1 0.4 ) endpoint #Face-Faces -- Group A point F3 ( 0.4 0.4 0.1 ) endpoint point YP ( 0.3 -0.1 0.5 ) endpoint #General-Faces -- Group C point ZP ( -0.1 0.3 0.5 ) endpoint face ff (F1 F2 F3) endface face ff_ (F3 F2 F1) endface object Ffaces (ff ff_) endobject #Face-Faces -- Group A face xf (F1 F2 EM) endface face xf_ (EM F2 F1) endface object Xfaces (xf xf_) endobject #General-Faces -- Group C face yf (YP EM F2) endface face yf_ (F2 EM YP ) endface object Yfaces (yf yf_) endobject #General-Faces -- Group C face zf (ZP EM F1) endface face zf_ (F1 EM ZP ) endface object Zfaces (zf zf_) endobject #General-Faces -- Group C group XTfaces ### Try various rotations to see how the second set of Group B can align with the first one. instance Xfaces rotate(0 0 1)(180) ## this one works all by itself ! (* rotate(1 0 0)({expr $topo_rx}) rotate(0 1 0)({expr $topo_ry}) rotate(0 0 1)({expr $topo_rz}) rotate(1 1 1)({expr $topo_r111}) rotate(1 -1 -1)({expr $topo_r1nn}) rotate(-1 1 -1)({expr $topo_rn1n}) rotate(-1 -1 1)({expr $topo_rnn1}) *) endinstance endgroup group YTfaces ### Try various rotations to see how the second set of Group B can align with the first one. instance Yfaces rotate(0 0 1)(180) ## this one works all by itself ! rotate(1 0 0)({expr $topo_rx}) rotate(0 1 0)({expr $topo_ry}) rotate(0 0 1)({expr $topo_rz}) rotate(1 1 1)({expr $topo_r111}) rotate(1 -1 -1)({expr $topo_r1nn}) rotate(-1 1 -1)({expr $topo_rn1n}) rotate(-1 -1 1)({expr $topo_rnn1}) endinstance endgroup group ZTfaces ### Try various rotations to see how the second set of Group B can align with the first one. instance Zfaces rotate(0 0 1)(180) ## this one works all by itself ! rotate(1 0 0)({expr $topo_rx}) rotate(0 1 0)({expr $topo_ry}) rotate(0 0 1)({expr $topo_rz}) rotate(1 1 1)({expr $topo_r111}) rotate(1 -1 -1)({expr $topo_r1nn}) rotate(-1 1 -1)({expr $topo_rn1n}) rotate(-1 -1 1)({expr $topo_rnn1}) endinstance endgroup polyline Tedge pointlist( EN EP ) endpolyline sphere ball radius 0.1 endsphere (* ### to make "ARROWS" to mark directional edges ... crosssection circ type circle radius 0.06 slices 7 endcrosssection sweep etube path Tedge endpath crosssection circ begincap 1 endcap 1 endcrosssection endsweep cone arrowhead radius 0.1 height 0.4 thetaslices 12 begincap 1 endcone group arrow instance etube endinstance instance arrowhead translate(0 0 1) rotate(1 -1 0)(-90) translate(0 0 1) endinstance endgroup *) ###### A fixed reference frame ###################################### group tetra_frame ### Reference frame composed of: wire-edges and vertices marked with balls ### instance Tedge endinstance instance Tedge rotate(1 1 1)(120) endinstance instance Tedge rotate(1 1 1)(-120) endinstance instance Tedge rotate(1 0 0)(180) endinstance instance Tedge rotate(1 1 1)(120) rotate(0 0 1)(180) endinstance instance Tedge rotate(1 1 1)(-120) rotate(1 0 0)(180) endinstance instance ball translate(1 1 1) surface W endinstance instance ball translate(1 -1 -1) surface O endinstance instance ball translate(-1 1 -1) surface P endinstance instance ball translate(-1 -1 1) surface L endinstance endgroup ######### define representatives of the various types of faces ################ group face_faces ## GROUP A --- uses a subgroup of the tetrahedral symmetry group. instance Ffaces surface W endinstance instance Ffaces rotate(1 0 0)(180) surface O endinstance instance Ffaces rotate(0 1 0)(180) surface P endinstance instance Ffaces rotate(0 0 1)(180) surface L endinstance endgroup group edge_faces ## GROUP B --- uses a special "generator" composed of a flip around Y-axis and 3 rotations around 111-axis. instance Efaces surface R endinstance instance Efaces surface C rotate(0 1 0)(180) endinstance instance Efaces surface G rotate(1 1 1)(120) endinstance instance Efaces surface M rotate(0 1 0)(180) rotate(1 1 1)(120) endinstance instance Efaces surface B rotate(1 1 1)(-120) endinstance instance Efaces surface Y rotate(0 1 0)(180) rotate(1 1 1)(-120) endinstance endgroup (* 12 general faces associated with Group B group x1_faces ## GROUP C instance Xfaces surface R endinstance instance Xfaces surface C rotate(0 1 0)(180) endinstance instance Xfaces surface G rotate(1 1 1)(120) endinstance instance Xfaces surface M rotate(0 1 0)(180) rotate(1 1 1)(120) endinstance instance Xfaces surface B rotate(1 1 1)(-120) endinstance instance Xfaces surface Y rotate(0 1 0)(180) rotate(1 1 1)(-120) endinstance endgroup group x2_faces instance XTfaces surface R endinstance instance XTfaces surface C rotate(0 1 0)(180) endinstance instance XTfaces surface G rotate(1 1 1)(120) endinstance instance XTfaces surface M rotate(0 1 0)(180) rotate(1 1 1)(120) endinstance instance XTfaces surface B rotate(1 1 1)(-120) endinstance instance XTfaces surface Y rotate(0 1 0)(180) rotate(1 1 1)(-120) endinstance endgroup *) group x4_face_grp ## GROUP C ==> A --- uses 3 rotations around 111-axis and then "generator A". instance Xfaces endinstance instance Xfaces rotate(1 1 1)(120) endinstance instance Xfaces rotate(1 1 1)(-120) endinstance endgroup group x4_faces instance x4_face_grp surface W endinstance instance x4_face_grp rotate(1 0 0)(180) surface O endinstance instance x4_face_grp rotate(0 1 0)(180) surface P endinstance instance x4_face_grp rotate(0 0 1)(180) surface L endinstance endgroup group y4_face ## GROUP C ==> A --- uses "generator A" and 3 rotations around 111-axis. instance Yfaces surface W endinstance instance Yfaces rotate(1 0 0)(180) surface O endinstance instance Yfaces rotate(0 1 0)(180) surface P endinstance instance Yfaces rotate(0 0 1)(180) surface L endinstance endgroup group y4_faces instance y4_face endinstance instance y4_face rotate(1 1 1)(120) endinstance instance y4_face rotate(1 1 1)(-120) endinstance endgroup (* 24 truly general faces ... actually involving two types of faces that are mirror images of one another. group y1_faces instance Yfaces surface R endinstance instance Yfaces surface C rotate(0 1 0)(180) endinstance instance Yfaces surface G rotate(1 1 1)(120) endinstance instance Yfaces surface M rotate(0 1 0)(180) rotate(1 1 1)(120) endinstance instance Yfaces surface B rotate(1 1 1)(-120) endinstance instance Yfaces surface Y rotate(0 1 0)(180) rotate(1 1 1)(-120) endinstance endgroup group y2_faces instance YTfaces surface R endinstance instance YTfaces surface C rotate(0 1 0)(180) endinstance instance YTfaces surface G rotate(1 1 1)(120) endinstance instance YTfaces surface M rotate(0 1 0)(180) rotate(1 1 1)(120) endinstance instance YTfaces surface B rotate(1 1 1)(-120) endinstance instance YTfaces surface Y rotate(0 1 0)(180) rotate(1 1 1)(-120) endinstance endgroup group z1_faces instance Zfaces surface R endinstance instance Zfaces surface C rotate(0 1 0)(180) endinstance instance Zfaces surface G rotate(1 1 1)(120) endinstance instance Zfaces surface M rotate(0 1 0)(180) rotate(1 1 1)(120) endinstance instance Zfaces surface B rotate(1 1 1)(-120) endinstance instance Zfaces surface Y rotate(0 1 0)(180) rotate(1 1 1)(-120) endinstance endgroup group z2_faces instance ZTfaces surface R endinstance instance ZTfaces surface C rotate(0 1 0)(180) endinstance instance ZTfaces surface G rotate(1 1 1)(120) endinstance instance ZTfaces surface M rotate(0 1 0)(180) rotate(1 1 1)(120) endinstance instance ZTfaces surface B rotate(1 1 1)(-120) endinstance instance ZTfaces surface Y rotate(0 1 0)(180) rotate(1 1 1)(-120) endinstance endgroup *) ############### putting all six sets together: ################# group assembly instance tetra_frame surface W endinstance instance face_faces rotate(1 0 0)({expr $topo_rx}) rotate(0 1 0)({expr $topo_ry}) rotate(0 0 1)({expr $topo_rz}) endinstance instance edge_faces endinstance ### EXPERIMENTS WITH VARIOUS FACE GROUPINGS: (* instance x1_faces endinstance instance x2_faces endinstance instance y1_faces endinstance instance y2_faces endinstance instance z1_faces endinstance instance z2_faces endinstance *) instance x4_faces endinstance instance y4_faces endinstance endgroup ######### include "viewing.slf" ################# light amb type SLF_AMBIENT color (0.3 0.3 0.3) endlight light sun type SLF_DIRECTIONAL color (0.9 0.9 0.9) endlight group world instance assembly scale (0.05 0.05 0.05) translate (0 0 0) endinstance instance amb id main_amb endinstance instance sun id left_sun rotate (0 1 0) (-45) rotate (0 0 1) (-60) endinstance endgroup camera cam #projection SLF_PARALLEL projection SLF_PERSPECTIVE frustum ( -0.1 -0.1 -2 ) ( 0.1 0.1 -0.01 ) endcamera group gCam instance cam id iCam translate ( 0.0 0.0 1.0 ) endinstance endgroup window Window background (0.4 0.4 0.4) endwindow viewport vp Window endviewport render vp gCam.iCam.cam world light world.left_sun.sun light world.main_amb.amb endrender #################################################