#*********************spiral.py*************************
#
# William Baker
#
#  usage:   python spiral.py --iterations x --percentage y
#
#  where:
#
#          x = number of iterations (integer)
#          y = percentage expressed as a decimal (i.e. .5 not 50)
#*********************************************************

from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
from math import *
from getopt import *
import sys

eye=[5,5,25]
at=[5,5,0]
up=[0,1,0]
numboxes=10
percentage=.5


def initialize():
   glDisable(GL_LIGHTING)
   glEnable(GL_NORMALIZE)

def draw():
    global eye, at, up, numboxes, percentage
    
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)

    glClearColor(0,0,0,0)

    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    gluPerspective(45,1,.1,100)   

    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()
    gluLookAt(eye[0],eye[1],eye[2],at[0],at[1],at[2],up[0],up[1],up[2])
    
    corner1=[0.0,0.0]
    corner2=[10.0,0.0]
    corner3=[10.0,10.0]
    corner4=[0.0,10.0]
    

    glColor3f(.75,.75,.75)
    glLineWidth(1)

    for j in range(0,numboxes):
        glColor3f(0,1,1)
        glLineWidth(2)               
        glBegin(GL_LINES)             
        glVertex3f(corner1[0],corner1[1],0)
        glVertex3f((corner1[0]*(1-percentage)+corner2[0]*percentage), 
                (corner1[1]*(1-percentage)+corner2[1]*percentage),0)
        glEnd()

        
        glColor3f(.75,.75,.75)
        glLineWidth(1)
        glBegin(GL_LINES)             
        glVertex3f((corner1[0]*(1-percentage)+corner2[0]*percentage), 
                (corner1[1]*(1-percentage)+corner2[1]*percentage),0)
        glVertex3f(corner2[0],corner2[1],0)
        
        
        glVertex3f(corner2[0],corner2[1],0)
        glVertex3f(corner3[0],corner3[1],0)
        
        glVertex3f(corner3[0],corner3[1],0)
        glVertex3f(corner4[0],corner4[1],0)
        
        glVertex3f(corner4[0],corner4[1],0)
        glVertex3f(corner1[0],corner1[1],0)
                
        glEnd()

        temp1=[(corner1[0]*(1-percentage)+corner2[0]*percentage),
                  (corner1[1]*(1-percentage)+corner2[1]*percentage)]
        temp2=[(corner2[0]*(1-percentage)+corner3[0]*percentage),
                  (corner2[1]*(1-percentage)+corner3[1]*percentage)]
        temp3=[(corner3[0]*(1-percentage)+corner4[0]*percentage),
                  (corner3[1]*(1-percentage)+corner4[1]*percentage)]
        temp4=[(corner4[0]*(1-percentage)+corner1[0]*percentage),
                  (corner4[1]*(1-percentage)+corner1[1]*percentage)]

        corner1=temp1
        corner2=temp2
        corner3=temp3
        corner4=temp4

    glutSwapBuffers()

def idle():
   #draw()
   glutPostRedisplay()

def main():
   global numboxes, percentage 
   try:
       opts, args = getopt(sys.argv[1:],"",['iterations=',
               'percentage='])
   except GetoptError:
       sys.exit(1)

   numboxes=int((opts[0])[1])
   percentage=float((opts[1])[1])

   
   glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH)
   glutInitWindowSize(640,640)
   glutCreateWindow("Recursive Sprial By William Baker, math198 2005")
   glEnable(GL_DEPTH_TEST)
   glutDisplayFunc(draw)
   #glutKeyboardFunc(keyboard)
   #glutSpecialFunc(specialkeys)
   glutIdleFunc(idle)
   initialize()
   glutMainLoop()

main()

