From: Stephen H. <sh...@ua...> - 2000-10-23 16:51:55
|
I was testing the ico.py program and found several things that caused a bunch of syntax errors-- many '3D's' and extra = signs VPython didn't like. Cleaning those out gave a working program (below). Did anybody else try this out? Did it run without being doctored? Steve Highland [Arrrgh... I don't know what I'm doin' ...] ________________ from visual import * class ico: def __init__(self): f =frame() root5 = 5.0 ** 0.5 phi = (1.0 + root5)/2.0 tau = 1.0/phi points=[(1.0,phi,0.0),(-1.0,phi,0.0),(-1.0,-phi,0.0),(1.0,-phi,0.0), (0.0,1.0,phi),(0.0,-1.0,phi),(0.0,-1.0,-phi),(0.0,1.0,-phi), (phi,0.0,1.0),(phi,0.0,-1.0),(-phi,0.0,-1.0),(-phi,0.0,1.0)] self.vertices = [] for point in points: self.vertices.append(sphere(frame=f, pos=point, radius=0.4, color=color.blue)) ico_edge_indices = [ (0,1),(0,7),(0,9),(0,8),(0,4), (1,7),(7,9),(9,8),(8,4),(4,1), (7,10),(10,1),(1,11),(11,4),(4,5), (5,8),(8,3),(3,9),(9,6),(6,7), (10,11),(11,5),(5,3),(3,6),(6,10), (2,10),(2,11),(2,5),(2,3),(2,6)] self.edges = [] for edge in ico_edge_indices: v1 = vector(points[edge[0]]) v2 = vector(points[edge[1]]) v3 = v2 - v1 self.edges.append(cylinder(frame=f, pos=v1, axis=v3, color=color.red,radius=0.1)) face_list =[0,9,7,6,10,2,11,5,4,8,0,9,0,1,7,10,0,4,1,11,10,6,2,3,5,8,11,2,10,6] solid = [] for index in face_list: solid.append(points[index]) self.faces = convex(frame=f, pos = solid, color=color.green) self.frame = f def rotate(self, angle=None): self.frame.rotate(angle=angle, axis=(0.0,0.0,-1.0)) def cycleColors(self, object=None): if object == None: for obj in self.vertices: self.cycleColors(obj) for obj in self.edges: self.cycleColors(obj) self.cycleColors(self.faces) return (red, green, blue) = object.color if red <= 0.0: if green <= 0.0: blue = blue - 0.01 red = red + 0.01 else: green = green - 0.01 blue = blue + 0.01 elif green <= 0.0: if (blue <= 0.0): red = red - 0.01 green = green + 0.01 else: blue = blue - 0.01 red = red + 0.01 else: red = red - 0.01 green = green + 0.01 object.color = (red, green, blue) if __name__ == '__main__': i = ico() # rate(30) while(1): i.rotate(0.005) i.cycleColors() |