/* See {Dodecahedron.h} */ #include /* Last edited on 2013-03-17 22:53:13 by stolfilocal */ #define Dodecahedron_C_COPYRIGHT \ "Copyright © 2000,2007 Universidade Estadual de Campinas (UNICAMP)" #include #include #include SixPlaces_t HalfDodecahedron(void); /* Builds half a dodecahedron. */ Place_t NextE2(Place_t p); /* = NextE(NextE(p)) */ Place_t PrevE2(Place_t p); /* = PrevE(PrevE(p)) */ SixPlaces_t HalfDodecahedron(void) { SixPlaces_t a; int i; for (i = 0; i < 6; i++) { a.p[i] = PolygonMakeSng(5); } SetNextF( a.p[0], Clock(PrevE(a.p[3]))); SetNextF( NextE(a.p[0]), Clock(PrevE(a.p[2]))); SetNextF(NextE2(a.p[0]), Clock(PrevE(a.p[1]))); SetNextF( PrevE(a.p[0]), Clock(PrevE(a.p[4]))); SetNextF(PrevE2(a.p[0]), Clock(PrevE(a.p[5]))); SetNextF(a.p[5], Clock(PrevE2(a.p[1]))); SetNextF(a.p[1], Clock(PrevE2(a.p[2]))); SetNextF(a.p[2], Clock(PrevE2(a.p[3]))); SetNextF(a.p[3], Clock(PrevE2(a.p[4]))); SetNextF(a.p[4], Clock(PrevE2(a.p[5]))); for (i = 0; i < 6; i++) { SetOrgAll( a.p[i], OrgV( a.p[i]) ); SetOrgAll( NextE(a.p[i]), OrgV( NextE(a.p[i]))); SetOrgAll(NextE2(a.p[i]), OrgV(NextE2(a.p[i]))); SetOrgAll( PrevE(a.p[i]), OrgV( PrevE(a.p[i]))); SetOrgAll(PrevE2(a.p[i]), OrgV(PrevE2(a.p[i]))); } return a; } Place_t MakeDodecahedron(void) { SixPlaces_t a = HalfDodecahedron(); SixPlaces_t b = HalfDodecahedron(); SetNextF( NextE(b.p[8-6]), Clock( NextE(a.p[4]))); SetNextF(NextE2(b.p[8-6]), Clock(NextE2(a.p[5]))); SetNextF(NextE2(b.p[9-6]), Clock(NextE2(a.p[4]))); SetNextF( NextE(b.p[9-6]), Clock( NextE(a.p[3]))); SetNextF(NextE2(b.p[10-6]), Clock(NextE2(a.p[3]))); SetNextF( NextE(a.p[2]), Clock( NextE(b.p[10-6]))); SetNextF(NextE2(a.p[2]), Clock(NextE2(b.p[11-6]))); SetNextF( NextE(a.p[1]), Clock( NextE(b.p[11-6]))); SetNextF( NextE(a.p[5]), Clock( NextE(b.p[7-6]))); SetNextF(NextE2(a.p[1]), Clock(NextE2(b.p[7-6]))); int i; for (i = 0; i < 6; i++) { SetOrgAll( a.p[i], OrgV( a.p[i]) ); SetOrgAll( NextE(a.p[i]), OrgV( NextE(a.p[i]))); SetOrgAll(NextE2(a.p[i]), OrgV(NextE2(a.p[i]))); SetOrgAll( PrevE(a.p[i]), OrgV( PrevE(a.p[i]))); SetOrgAll(PrevE2(a.p[i]), OrgV(PrevE2(a.p[i]))); } for (i = 0; i < 6; i++) { SetOrgAll( b.p[i], OrgV( b.p[i]) ); SetOrgAll( NextE(b.p[i]), OrgV( NextE(b.p[i]))); SetOrgAll(NextE2(b.p[i]), OrgV(NextE2(b.p[i]))); SetOrgAll( PrevE(b.p[i]), OrgV( PrevE(b.p[i]))); SetOrgAll(PrevE2(b.p[i]), OrgV(PrevE2(b.p[i]))); } return a.p[0]; } Place_t NextE2(Place_t p) { return NextE(NextE(p)); } Place_t PrevE2(Place_t p) { return PrevE(PrevE(p)); } #define Dodecahedron_C_author \ "Created by L. A. P. Lozada, UNICAMP, 1999-2000. Revisions:\n" \ " 26-01-2007 : Moved {MakeDodecahedron} and {HalfDodecahedron}\n" \ " from {MakePlatonic.c} to here.\n" \ " 24-01-2007 : Converted to C by J. Stolfi\n"