# -*- coding: utf-8 -*-
#qpy:pygame

#==============================================================================
# qfl.py - figuras de Lissajous
#------------------------------------------------------------------------------
# FJA - fja@neocipres.com                             Octubre de 2018
#==============================================================================

import sys
import math
import random
import pygame
from pygame.locals import *

XMAX = 1080
YMAX = 1920
X0 = XMAX / 2
Y0 = YMAX / 2
NEGRO = (0, 0, 0)
COLOR = (255, 233, 0)
CYAN = (0, 255, 255)
tr = 1
PI = 3.1415

__uso__ = '''
    =====================================
    Uso:

    qfl.py <f1> <f2> <desfase> [traza]
    Ejemplo: qfl.py 1 2 1 1
    ====================================='''

try:
    if len(sys.argv) > 1:
        f1 = int(sys.argv[1])
        f2 = int(sys.argv[2])
        d = int(sys.argv[3])
        if len(sys.argv) == 5:
            tr = int(sys.argv[4])

    else:
        f1 = random.randint(1, 5)
        f2 = random.randint(1, 5)
        d = random.randint(0, 6)

except (IndexError, ValueError):
    print "\n\t Error: ", sys.exc_info()[0]
    print __uso__
    sys.exit(1)

pygame.init()
screen = pygame.display.set_mode((XMAX, YMAX))
screen.fill(NEGRO)
fuente = pygame.font.SysFont("DejaVuSans", 64)
label1 = fuente.render("Figuras de Lissajous", 1, CYAN)
screen.blit(label1, (150, 100))
w = "w = %s  w' = %s  d = %s" % (str(f1), str(f2), str(d))
label2 = fuente.render(w, 1, CYAN)
screen.blit(label2, (150, YMAX - 150))
t = 0
clock = pygame.time.Clock()

imagen = pygame.Surface([3, 3])
imagen.fill(COLOR)
pos = (X0, Y0)
#screen.blit(imagen, pos)

while 1:
    for evento in pygame.event.get():
        if evento.type in (QUIT, KEYDOWN):
            pygame.quit()
            sys.exit(1)

        elif evento.type == MOUSEBUTTONDOWN:
            f1 = random.randint(1, 5)
            f2 = random.randint(1, 5)
            d = random.randint(0, 6)
            w = "w = %s  w' = %s  d = %s" % (str(f1), str(f2), str(d))
            label2 = fuente.render(w, 1, CYAN)
            screen.fill(NEGRO)
            screen.blit(label1, (150, 50))
            screen.blit(label2, (150, YMAX - 150))

    x = 300 * math.sin(f1 * 1800 * PI * t + d * (PI / 6))
    y = 300 * math.cos(f2 * 1800 * PI * t)

    pos = (X0 + x, Y0 + y)
    t = t + 1
    screen.blit(imagen, pos)
    pygame.display.flip()
    if tr == 0:
        screen.fill(NEGRO)
        screen.blit(label1, (150, 50))
        screen.blit(label2, (150, YMAX - 150))

    clock.tick(60)
