Below (appended code) is the kind of thing I use to introduce VPython, some high school math hoped for, in that there's a little bit of trig, an allusion to complex numbers. The fun here is VPython lets us put colorful geometric objects on screen then change their position at runtime, so it's not like some ray tracing program. So you can have a ball traveling around in a ring, or clock hands and stuff, all without any overwhelming amount of code. Six working examples in under 200 lines, including blank ones, ain't bad. But then I don't try out all the objects. This is a genre nothing exhaustive -- one could imagine thousands of such examples in a database somewhere. Another example on YouTube: http://www.youtube.com/watch?v=QXCPDsBN2Kc (looks like an obelisk, thinking of the late Arthur C.C.). Dr. Sonnenfeld in New Mexico provides the source underneath but Youtube de-indents for us, so here it is again: from visual import * from random import randint thecolors = [color.green, color.red, color.orange, color.magenta] for i in range(10000): place = (randint(-100,100), randint(-100, 100), randint(-10,10)) rcolor = randint(0,3) ball = sphere(pos = place, radius=0.5, color = thecolors[rcolor]) You can just hit F5 in IDLE's text editor and it'll run. Likewise for the examples below, I have students go to the bottom and progressively uncomment each test, hit F5 to run, always in the same IDLE session (shell restarts by itself, upon close of VPython window, very smooth). Dunno who many of you are using VPython in classes. I've got a Windows lab going at the local university with Python 2.5, VPython, POV-Ray on every workstation. For those on this list for a long time: Arthur Siegel wrote the most ambitious projective geometry package in Python, starting from his own fascination with that subject (not programming per se, he came from financial circles), and we used to argue about whether VPython should just be a part of the standard library, given how powerful it is (we argued about a lot of things -- miss the guy, he died very suddenly, the website is here: http://pygeo.sourceforge.net/ ). I do find that easy access to an OpenGL type space does marvels for language appeal, and given I'm recruiting in the open market, I'm glad to have VPython in my toolkit, really helps make my Saturday Academy class a viable elective. All the buzz about Python in general also helps of course. Kirby 4D Portland, Oregon """ Stuff to do with VPython vpython.org by Kirby Urner 4D Solutions 4dsolutions.net May 2, 2008 If you're on the Internet, why not keep a link to the documentation handy in your browser. """ from visual import * # get a lot of stuff import math # definitely wanna have math in the picture def stage(): scene = display(title='VPython Window', width=600, height=600, center=(0,0,0), background=(0,1,1)) return scene def firsttry(): # no arguments here """ The cylinder Object """ s = stage() s.autoscale = 0 s.scale = (0.5, 0.5, 0.5) # we figure out a good view s.select() rod = cylinder(pos=(0,0,0), axis=(5,0,0), radius=0.1) rod.color = color.green # but let's make it go around in circles: for i in range(500): angle = math.radians(i) # increment in degrees rod.axis = (math.cos(angle), math.sin(angle), 0) rate(100) def clock(): # no arguments here """ two arrow objects, one going around more slowly, night happens note: there's also a way to do rotation in XY by multiplying complex numbers, thanks to various identities (see orbits.py) """ s = stage() s.autoscale = 0 s.scale = (0.3, 0.3, 0.3) rod1 = arrow(pos=(0,0,0), axis=(3,0,0), shaftwidth=0.1) rod2 = arrow(pos=(0,0,0), axis=(1,0,0), shaftwidth=0.1) rod1.color = color.green rod2.color = color.red # clockwise this time, shorter one at 1/10th speed: for i in range(360*4,-1,-1): # four circles of angle angle1 = math.radians(i) # decrement in degrees angle2 = angle1/10.0 if i == 360*2: # switch to night view half way s.background = color.black rod1.axis = (3 * math.cos(angle1), 3 * math.sin(angle1), 0) rod2.axis = (1 * math.cos(angle2), 1 * math.sin(angle2), 0) rate(100) def balls(): # no arguments here """ arrow object leaves trail of balls """ s = stage() s.autoscale = 0 s.scale = (0.3, 0.3, 0.3) s.select() rod1 = arrow(pos=(0,0,0), axis=(3,0,0), shaftwidth=0.1) rod1.color = color.green # clockwise again for i in range(360,-1,-1): # one circles of angle angle1 = math.radians(i) # increment in degrees position = (3 * math.cos(angle1), 3 * math.sin(angle1), 0) rod1.axis = position ball = sphere(pos=position, radius=0.2) rate(100) def spaceballs(): # no arguments here """ arrow object leaves trail of balls, spaced by 10 degrees """ s = stage() s.autoscale = 0 s.scale = (0.3, 0.3, 0.3) rod1 = arrow(pos=(0,0,0), axis=(3,0,0), shaftwidth=0.1) rod1.color = color.green # clockwise again for i in range(360,-1,-1): # one circles of angle angle1 = math.radians(i) # increment in degrees position = (3 * math.cos(angle1), 3 * math.sin(angle1), 0) rod1.axis = position if not (i % 10): ball = sphere(pos=position, radius=0.2, color = color.orange) rate(100) def rings(): """ Have a ball travel around on a ring """ s = stage() s.autoscale = 0 s.scale = (0.3, 0.3, 0.3) s.select() thering = ring(pos=(0,0,0), axis=(0,0,1), # OK to comment this way radius=2.5, thickness=0.1, color=color.green) theball = sphere(pos=(2.5,0,0), radius=0.2, color = color.orange) # clockwise again for i in range(360*5,-1,-1): # five circles of angle angle1 = math.radians(i) # increment in degrees position = (2.5 * math.cos(angle1), 2.5 * math.sin(angle1), 0) theball.pos = position rate(100) def pyramids(): """ Desert plane, some Egyptian pyramids """ s = stage() s.backcolor = color.blue # dark blue sky s.autoscale = 0 s.scale = (0.1, 0.1, 0.1) mybox = box(pos=(0,0,0), length=10, height=0.1, width=10, color = color.yellow) p1 = pyramid(pos=(0,0,0), axis = (0,1,0), size=(4,2,2), color = color.red) p2 = pyramid(pos=(-4,0,-3), axis = (0,1,0), size=(5,1,1), color = color.green) p3 = pyramid(pos=(2,0,4), axis = (0,1,0), size=(6,2,2), color = color.orange) if __name__ == '__main__': # firsttry() # clock() # balls() # spaceballs() # rings() pyramids()
participants (1)
-
kirby urner