// manta57adj.fe // Adjoint of Schoen's manta genus 57 surface. /* Commands: gogo - typical evolution showcube - show one unit cell, as on web page showcubelet - show 1/8 of unit cell, as on web page showocta - show octahedral cell, as on web page octa_edge - create outline edge for octahedral cell transforms off - show just single fundamental region setcolor - to color one side yellow, as in my web page. To turn off showing all the edges in the graphics display, hit the "e" key in the graphics window. */ parameter asize = 4.263003102112825 // shape parameter, for period killing parameter bsize = 2.745762127998676 // shape parameter, for period killing parameter csize = 3.492647582672936 // shape parameter, for period killing constraint 1 // mirror plane in adjoint formula: z - x = asize+bsize+csize+1 // Constraints for use after adjoint transformation constraint 3 formula: y = z constraint 4 formula: y = 0.5 constraint 5 formula: y = x constraint 6 formula: x = 0 constraint 7 formula: x+z = 1 constraint 8 formula: z = 1 view_transform_generators 8 -1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 // a: x mirror 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 1 // b: x y swap 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 // c: y = z mirror swap_colors 0 0 -1 1 0 -1 0 1 -1 0 0 1 0 0 0 1 // d: C2 rotation -1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 // e: x mirror 1 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 1 // f: y mirror 1 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 1 // g: z mirror 1 0 0 0 0 1 0 0 0 0 -1 2 0 0 0 1 // h: z=1 mirror vertices 1 -asize-bsize-csize-1 0 0 fixed 2 0 0 0 fixed 3 0 -1 1 fixed 4 -asize asize-1 1 fixed 5 -asize -bsize+asize-1 1+bsize fixed 6 -asize-csize csize-bsize+asize-1 1+bsize fixed edges 1 1 2 fixed 2 2 3 fixed 3 3 4 fixed 4 4 5 fixed 5 5 6 fixed 6 6 1 constraint 1 faces 1 1 2 3 4 5 6 read hessian_normal // good evolution gg := { refine edge where valence == 1; g 5; r; g 10; u; V; g5; hessian;hessian; g 5; hessian; hessian; r; g 5; u; V; u; g 5; hessian; hessian; g5; hessian;hessian; r; g 5; u; V; u; g 5; hessian; hessian; g 5; V; u; V; hessian; hessian; r; g 5; u; V; u; g 5; hessian; hessian; g 5; V; u; V; hessian; hessian; } // Some distances in the adjoint calc := { edge3dy := sum(edge ee where original==3, sum(ee.facet ff, (ff.z*ee.x-ff.x*ee.z)/sqrt(ff.x^2+ff.y^2+ff.z^2))); edge3dz := sum(edge ee where original==3, sum(ee.facet ff, (ff.x*ee.y-ff.y*ee.x)/sqrt(ff.x^2+ff.y^2+ff.z^2))); printf " edge3dy - edge3dz: %g \n",edge3dy-edge3dz; edge4dy := sum(edge ee where original==4, sum(ee.facet ff, (ff.z*ee.x-ff.x*ee.z)/sqrt(ff.x^2+ff.y^2+ff.z^2))); edge4dx := sum(edge ee where original==4, sum(ee.facet ff, (ff.y*ee.z-ff.z*ee.y)/sqrt(ff.x^2+ff.y^2+ff.z^2))); printf " edge4dx - edge4dy: %g \n",edge4dx-edge4dy; edge5dy := sum(edge ee where original==5, sum(ee.facet ff, (ff.z*ee.x-ff.x*ee.z)/sqrt(ff.x^2+ff.y^2+ff.z^2))); edge5dz := sum(edge ee where original==5, sum(ee.facet ff, (ff.x*ee.y-ff.y*ee.x)/sqrt(ff.x^2+ff.y^2+ff.z^2))); printf " edge5dy - edge5dz: %g \n",edge5dy-edge5dz; } read "adjoint.cmd" // Call this to do adjoint transformation! adj := { unset vertex constraint 1; unset edge constraint 1; adjoint; } // Applying constraints after adjointing frame := { unfix vertices; unfix edges; qq := vertex[1].x; set vertex x x-qq; // vertex 1 to origin qq := vertex[1].y; set vertex y y-qq; qq := vertex[1].z; set vertex z z-qq; aa := maximum(max(vertex,x-y),max(vertex,y-z)); mag := aa/.5; set vertex x x/mag; set vertex y y/mag; set vertex z z/mag; set vertex y y+.5; set vertex z z+1; foreach edge ee where original==1 do { set ee.vertex constraint 6; set ee constraint 6; }; foreach edge ee where original==2 do { set ee constraint 3; set ee.vertex constraint 3; }; foreach edge ee where original==3 do { set ee constraint 5; set ee.vertex constraint 5; }; foreach edge ee where original==4 do { set ee constraint 3; set ee.vertex constraint 3; }; foreach edge ee where original==5 do { set ee constraint 5; set ee.vertex constraint 5; }; foreach edge ee where original==6 do { set ee constraint 7; set ee.vertex constraint 7; set ee constraint 4; set ee.vertex constraint 4; fix ee; fix ee.vertex; }; } // To get true asize after evolving after adjointing true_asize := { printf "True asize: %20.15f\n", sum(edge where original == 3,length)/sum(edge where original==2,length); } true_bsize := { printf "True bsize: %20.15f\n", sum(edge where original == 4,length)/sum(edge where original==2,length); } true_csize := { printf "True csize: %20.15f\n", sum(edge where original == 5,length)/sum(edge where original==2,length); } true := {true_asize;true_bsize;true_csize;} // Set inside color to yellow setcolor := { set facet frontcolor yellow } // Typical evolution gogo := { gg; adj; frame; show_trans "R"; V; V; hessian; hessian; } // Show 2-part manta ray showmanta := { transform_expr "d"; show_trans "R"; } // Show 1/8 unit cell showcubelet := { transform_expr "cdcdcd"; show edge where valence == 1; show_trans "R"; } // Show unit cell showcube := { transform_expr "gfecdcdcd"; show edge where valence == 1; show_trans "R"; } // Show octahedral cell showocta := { transform_expr "babadad"; show edge where valence <= 1; show_trans "R"; } octa_edge := { va := new_vertex(.5,.5,.5); vb := new_vertex(0,0,0); newe1 := new_edge(va,vb); set edge[newe1] no_refine; set edge[newe1] bare; set edge[newe1] fixed; vc := new_vertex(0,0,1); newe2 := new_edge(vb,vc); }