""" I assume that you mean Synergetics and not Coxeter: The (W,X,Y,Z) coordinates of the A-module are: (0,0,0,0), (2/3,0,0,0), (1,0,1,0), (2,2,2,0) The (W,X,Y,Z) coordinates of the B-module are: (0,0,0,0), (2/3,0,0,0), (2,1,1,0), (2,0,2,0) The (W,X,Y,Z) coordinates of the MITE are: (0,0,0,0), (1,0,1,0), (2,1,0,1), (1,2,1,0) -- Alan Michelson http://groups.yahoo.com/group/synergeo/message/32447 Followup: http://groups.yahoo.com/group/synergeo/message/32503 """ from __future__ import division # still needed in Python 2.5 """ The following two modules may be obtained from the Oregon Curriculum Network official website: http://www.4dsolutions.net/ocn/python/ """ # chakovian coordinates (fuller.4d) from coords import Qvector # wrapper for VPython xyz vector (coxeter.3d) from stickworks import Vector, Edge, axes from math import degrees a = Vector(Qvector((1,0,0,0)).xyz) b = Vector(Qvector((0,1,0,0)).xyz) c = Vector(Qvector((0,0,1,0)).xyz) d = Vector(Qvector((0,0,0,1)).xyz) sb = Vector(Qvector((0,0,0,0)).xyz) pt = Vector(Qvector((2/3,0,0,0)).xyz) oa = Vector(Qvector((1,0,1,0)).xyz) bg = Vector(Qvector((2,2,2,0)).xyz) b0 = Vector(Qvector((2,1,1,0)).xyz) b1 = Vector(Qvector((2,0,2,0)).xyz) m0 = Vector(Qvector((2,1,0,1)).xyz) m1 = Vector(Qvector((1,2,1,0)).xyz) class Tetrahedron (object): def __init__(self, v0, v1, v2, v3): # all possible edges between four vertices self.vertices = dict(A=v0,B=v1,C=v2,D=v3) self.faces = ['ABC','ACD','ADB','BCD'] self.edges = [Edge(v0,v1), Edge(v0,v2), Edge(v0,v3), Edge(v1,v2), Edge(v1,v3), Edge(v2,v3)] def draw(self): # VPython display for e in self.edges: e.draw() def _getangle(self, angle): c0 = self.vertices[angle[0]] c1 = self.vertices[angle[1]] c2 = self.vertices[angle[2]] return degrees((c0-c1).diff_angle(c2-c1)) def rep_angles(self): for face in self.faces: for i,j,k in [(0,1,2),(1,2,0),(2,0,1)]: theangle = face[i]+face[j]+face[k] print 'Angle %s = %s' % (theangle, self._getangle(theangle)) class Amodule (Tetrahedron) : """ A Module """ def __init__(self): super(Amodule, self).__init__(sb, pt, oa, bg) class Bmodule (Tetrahedron) : """ B Module """ def __init__(self): super(Bmodule, self).__init__(sb, pt, b0, b1) class Mite (Tetrahedron) : """ MITE Module """ def __init__(self): super(Mite, self).__init__(sb, oa, m0, m1) def test0(): """ Source in Synergetics: http://www.rwgrayprojects.com/synergetics/s09/figs/f86421.html http://www.rwgrayprojects.com/synergetics/s09/figs/f86422.html """ # green axes, please Edge.color = (0,1,0) axes(2,2,2) # red A module Edge.color = (1,0,0) amod = Amodule() print "A mod angles:" amod.rep_angles() amod.draw() # blue B module Edge.color = (0,0,1) bmod = Bmodule() print "B mod angles:" bmod.rep_angles() bmod.draw() # cyan Mite module Edge.color = (0,1,1) mite = Mite() print "Mite angles:" mite.rep_angles() mite.draw() def test1(): # Purple tetrahedron Edge.color = (1,0,1) tet = Tetrahedron(a,b,c,d) tet.draw() print "Regular tetrahedron:" tet.rep_angles() if __name__ == '__main__': test0() test1() """ K. Urner, PKL, Feb 17 2007 """