# -*- 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)