[Edu-sig] For classroom use...

kirby urner kirby.urner at gmail.com
Fri Feb 9 18:47:28 CET 2007


Here's some field tested code that I think showcases what a student
interested in computer graphics might eyeball and run, after some
background in the basic syntax.

True, there's stuff going on behind the scenes (another module, plus
VPython, all well documented).

I'll plan to use this with my high schoolers in April.  I want them to
see what real Python really looks like, to get ideas from, for doing
graphics of their own.

We also use VRML, maybe just projected on the big screen in front.

Kirby


"""
coupler.py
by K. Urner, (gpl) 2007 4dsolutions.net

Documentation for Coupler:

The Coupler is a space-filling irregular octahedron defined
by three mutually orthogonal quadrilaterals:  one square and
two congruent rhombi.  This module constructs these quadri-
laterals and displays them in VPython.

In the concentric hierarchy, the Coupler's volume = 1 (i.e.
is same as tetrahedron's defined by 4 unit-radius CCP balls).

http://www.rwgrayprojects.com/synergetics/s09/figs/f86431.html

URL for stickworks.py:
http://www.4dsolutions.net/ocn/python/stickworks.py

Documentation for stickworks.py:
http://www.4dsolutions.net/ocn/stickworks.html

Relevant VRML worlds by sw dharmraj (see Synergeo on Yahoo!):
http://members.westnet.com.au/dharmraj/vrml/coupler.wrl
http://members.westnet.com.au/dharmraj/vrml/KmiteCube.wrl

See also:  Richard Hawkins Digital Archive:
http://www.newciv.org/Synergetic_Geometry/

"""

from stickworks import Vector, Edge, axes
from math import sqrt

sqrt2 = sqrt(2)
apexd = sqrt2/2.0

# convention nx for -x (negative x)
x = Vector((1,0,0))
y = Vector((0,1,0))
nx = Vector((-1,0,0))
ny = Vector((0, -1, 0))

apex = Vector((0, 0, apexd))
napex = Vector((0, 0, -apexd))


class Square (object) :
    """
    Coupler Square Equator in XY plane
    """

    def __init__(self):
        Edge.color = (1,0,0)
        self.edges = [Edge(x,y), Edge(y,nx),
                      Edge(nx,ny), Edge(ny,x)]

    def draw(self):
        for e in self.edges:
            e.draw()

class Fx (object) :
    """
    Coupler Equator in XZ plane
    """

    def __init__(self):
        Edge.color = (0,1,0)
        self.edges = [ Edge(x, apex), Edge(apex, nx),
                       Edge(nx, napex), Edge(napex, x)]

    def draw(self):
        for e in self.edges:
            e.draw()

class Fy (object) :
    """
    Coupler Equator in YZ plane
    """

    def __init__(self):
        self.edges = [ Edge(y, apex), Edge(apex, ny),
                       Edge(ny, napex), Edge(napex, y)]

    def draw(self):
        for e in self.edges:
            e.draw()

def test():
    """
    Draw a Coupler centered at (0,0,0) with XYZ Axes
    """

    # blue axes, please
    Edge.color = (0,0,1)
    axes(2,2,2)

    # create equator objects
    ofy = Fy()
    ofx = Fx()
    osq = Square()

    # draw the rhombi
    Edge.color = (0,1,0)
    ofy.draw()
    ofx.draw()

    # draw the square
    Edge.color = (1,0,0)
    osq.draw()

if __name__ == '__main__':
    test()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/edu-sig/attachments/20070209/6db7ce22/attachment.htm 


More information about the Edu-sig mailing list