#!/usr/bin/env python  
# -*- coding: utf-8 -*-

#==============================================
# fl.py - figuras de Lissajous
#----------------------------------------------
# FJA - neocipres@telefonica.net, Abril de 2007
#==============================================
 
import sys, math
import pygame
from pygame.locals import *

XMAX  = 800 
YMAX = 600
NEGRO = (32, 0, 64)
tr = 0


class Bola:
    def __init__(self, imagen, x0, y0, vx0, vy0):
        self.imagen = imagen
        self.x0 = x0
        self.y0 = y0
        self.vx = vx0
        self.vy = vy0
        self.pos = imagen.get_rect().move( (self.x0, self.y0) )
    def move(self):
        self.pos = self.pos.move( self.vx, self.vy )
     
    def setV(self, vx, vy):
        self.vx = vx
        self.vy = vy
       
def uso():
    print "\n\t====================================="
    print "\t Uso:                                  "
    print "\n\t\t fl.py <f1> <f2> <desfase> [traza] "
    print "\n\t Ejemplo: fl.py 1 2 1 1              "
    print "\n\t====================================="
    
def main( argv ):
    try:
        f1 = int( argv[0] )
        f2 = int( argv[1] )
        if f1 > 2 or f2 > 2:
            ap = 2
        else:
            ap = 1
        d = int( argv[2] )
        if len(argv) == 4:
            tr = int( argv[3] )
        else:
            tr = 0
    except ValueError:
        print "\n\t Error: ", sys.exc_info()[0]
        uso()
        sys.exit(2)
    except:
        print "\n\t Error: ", sys.exc_info()[0]
        uso()
        sys.exit(2)
        
    pygame.init()
    screen = pygame.display.set_mode( (XMAX, YMAX) )
    screen.fill( NEGRO )
    pygame.display.set_caption(' figuras de Lissajous ')
    imagen = pygame.image.load( "bola.gif" )
       
    bola = Bola(imagen, XMAX/2, YMAX/2, 0, 0 )
        
    t = 0
    while 1:
        
        for event in pygame.event.get():
            if event.type in (QUIT, KEYDOWN):
                sys.exit()
         
        x = ap*30*math.sin( f1*1800*3.1415*t  + d*(3.1415/6) ) 
        y = ap*30*math.cos( f2*1800*3.1415*t ) 
        bola.setV( x , y )
        bola.move()
        screen.blit(bola.imagen, bola.pos)
        t = t + 1
            
            
            
        pygame.display.update()        # o bien, pygame.display.flip()
        if tr == 0:
            screen.fill( NEGRO )
        pygame.time.delay( 1*25 )
        
        
if __name__ == '__main__':
    main( sys.argv[1:] )
