/* See {Sostenes.h} */ #include /* Last edited on 2007-02-03 13:49:14 by stolfi */ #define Sostenes_C_COPYRIGHT \ "Copyright © 2002,2007 Universidade Estadual de Campinas (UNICAMP)" #include #include #include #include #include #include #include #include #include void GlueGem(FourPlaces_vec_t *handles, uint i, uint j, uint cor); void GlueGem(FourPlaces_vec_t *handles, uint i, uint j, uint cor) { Place_t pi = Spin(handles->e[i].p[cor]); Place_t pj = handles->e[j].p[cor]; (void)Glue(pi,pj,1,TRUE); } FourPlaces_t MakeGemCell(void) { EightPlaces_t te = MakeTetraTopo(1,1); FourPlaces_t ha; ha.p[0] = Spin(Clock(PrevE(te.p[0]))); ha.p[1] = Spin(Clock(PrevE(te.p[6]))); ha.p[2] = NextE(te.p[1]); ha.p[3] = Spin(Clock(PrevE(te.p[2]))); return ha; } Place_t MakeGemProjective(void) { FourPlaces_vec_t handles = FourPlaces_vec_new(8); int i; for (i = 0; i < 8; i++) { handles.e[i] = MakeGemCell(); }; GlueGem(&handles, 0, 1, 3); GlueGem(&handles, 0, 6, 0); GlueGem(&handles, 0, 4, 1); GlueGem(&handles, 0, 3, 2); GlueGem(&handles, 1, 2, 2); GlueGem(&handles, 1, 5, 1); GlueGem(&handles, 1, 7, 0); GlueGem(&handles, 2, 6, 1); GlueGem(&handles, 2, 4, 0); GlueGem(&handles, 2, 3, 3); GlueGem(&handles, 3, 7, 1); GlueGem(&handles, 3, 5, 0); GlueGem(&handles, 4, 7, 2); GlueGem(&handles, 4, 5, 3); GlueGem(&handles, 5, 6, 2); GlueGem(&handles, 6, 7, 3); return handles.e[0].p[0]; } Place_t MakeGemR2420(void) { FourPlaces_vec_t handles = FourPlaces_vec_new(24); int i; for (i = 0; i < 24; i++) { handles.e[i] = MakeGemCell(); }; /* Cor 0: */ GlueGem(&handles, 1-1, 2-1, 0); GlueGem(&handles, 3-1, 4-1, 0); GlueGem(&handles, 5-1, 6-1, 0); GlueGem(&handles, 7-1, 8-1, 0); GlueGem(&handles, 9-1, 10-1, 0); GlueGem(&handles, 11-1, 12-1, 0); GlueGem(&handles, 13-1, 14-1, 0); GlueGem(&handles, 15-1, 16-1, 0); GlueGem(&handles, 17-1, 18-1, 0); GlueGem(&handles, 19-1, 20-1, 0); GlueGem(&handles, 21-1, 22-1, 0); GlueGem(&handles, 23-1, 24-1, 0); /* Cor 1: */ GlueGem(&handles, 1-1, 8-1, 1); GlueGem(&handles, 2-1, 3-1, 1); GlueGem(&handles, 4-1, 5-1, 1); GlueGem(&handles, 6-1, 7-1, 1); GlueGem(&handles, 9-1, 14-1, 1); GlueGem(&handles, 10-1, 11-1, 1); GlueGem(&handles, 12-1, 13-1, 1); GlueGem(&handles, 15-1, 20-1, 1); GlueGem(&handles, 16-1, 17-1, 1); GlueGem(&handles, 18-1, 19-1, 1); GlueGem(&handles, 21-1, 24-1, 1); GlueGem(&handles, 22-1, 23-1, 1); /* Cor 2: */ GlueGem(&handles, 1-1, 20-1, 2); GlueGem(&handles, 2-1, 19-1, 2); GlueGem(&handles, 3-1, 18-1, 2); GlueGem(&handles, 4-1, 17-1, 2); GlueGem(&handles, 5-1, 16-1, 2); GlueGem(&handles, 6-1, 13-1, 2); GlueGem(&handles, 7-1, 24-1, 2); GlueGem(&handles, 8-1, 9-1, 2); GlueGem(&handles, 10-1, 23-1, 2); GlueGem(&handles, 11-1, 22-1, 2); GlueGem(&handles, 12-1, 21-1, 2); GlueGem(&handles, 14-1, 15-1, 2); /* Cor 3: */ GlueGem(&handles, 1-1, 18-1, 3); GlueGem(&handles, 2-1, 17-1, 3); GlueGem(&handles, 3-1, 16-1, 3); GlueGem(&handles, 4-1, 9-1, 3); GlueGem(&handles, 5-1, 24-1, 3); GlueGem(&handles, 6-1, 11-1, 3); GlueGem(&handles, 7-1, 20-1, 3); GlueGem(&handles, 8-1, 19-1, 3); GlueGem(&handles, 10-1, 15-1, 3); GlueGem(&handles, 12-1, 23-1, 3); GlueGem(&handles, 13-1, 22-1, 3); GlueGem(&handles, 14-1, 21-1, 3); return handles.e[0].p[0]; } #define Sostenes_C_author \ "Created by L. A. P. Lozada in 2002 (?).\n" \ "Topology data provided by Sóstenes R. Lins, UFPE.\n" \ "Modification history:\n" \ " 2002-01-29 Last edit of Modula-3 version {MakeGem.m3} by L.A.P.Lozada\n" \ " 2007-02-01 Converted to C by J. Stolfi"