|
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()
|