(es) Homenaje al Doctor Alberto Sánchez
(eo) Omaĝo al Doktoro Alberto Sánchez
http://dx.doi.org/10.13140/RG.2.2.34092.90243
Descripción artística:
Homenaje al Doctor Alberto Sánchez, salvadoreño, quien descubrió el trazo de la curva Cornoide en 1895.
Motivación:
El trabajo de un salvadoreño que aportó la identificación de una curva de construcción relativamente simple que todos los grandes matemáticos de la historia pasaron por alto. La Escuela de Matemática de la Facultad de Ciencias Naturales y Matemática de la Universidad de El Salvador, lleva su nombre en su honor.
Descripción técnica:
Una vieja fotografía del Doctor Alberto Sánchez en la que cada pixel fue cambiado por una pequeña curva Cornoide con más o menos pasos intermedios con colores rojo, azul y verde para provocar los puntos correspondientes en una escala mayor.
Archivos
Código (Python):
#!/usr/bin/env python # coding: utf-8 # Copyright 2015 Eduardo Adam Navas López # Este programa es Software Libre liberado bajo la licencia GNU GPLv3 o su versión más reciente: # http://www.gnu.org/licenses/gpl.html """Este programa abre una imagen de baja resolución del rostro del Doctor Alberto Sánchez y la vuelve a generar delineada con pequeñas cornoides de 100x100 pixeles. La imagen fuente tiene 67x80 pixeles. """ import pygame import math import escala #peque = True peque = False if peque: ANCHODEST = 1675 ALTODEST = 2000 ANCHO = 25 ALTO = 25 NUMPASOSMIN = 1 NUMPASOSMAX = 15 NUMPASOSCURVA = 20 #En pixeles: GRUESO_CIRCULO = 1 GRUESO_CORNOIDE = 1 GRUESO_LINEA = 1 #RADIO_PUNTO = 1 else: ANCHODEST = 6700 ALTODEST = 8000 ANCHO = 100 ALTO = 100 NUMPASOSMIN = 1 NUMPASOSMAX = 50 NUMPASOSCURVA = 100 #En pixeles: GRUESO_CIRCULO = 1 GRUESO_CORNOIDE = 5 GRUESO_LINEA = 1 #RADIO_PUNTO = 1 ARCHIVO = "dr-alberto-sanchez2.jpg" INF_IZQ = (-0.7,-0.23) SUP_DER = (1.03,1.5) #En unidades virtuales: RADIO_CIRCULO = 1.0 ROJO = (255,0,0) VERDE = (0,255,0) AZUL = (0,0,255) BLANCO = (255,255,255) NEGRO = (0,0,0) COLOR_CORNOIDE = (128,128,128) COLOR_CIRCULO = (0,0,0) #COLOR_RADIO = (0,128,128) #COLOR_TANGENTE = (128,128,0) #COLOR_SECANTE = (0,128,0) #COLOR_FINAL = (128,0,128) #COLOR_CORNOIDE = (0,128,128) #COLOR_CIRCULO = (128,0,128) COLOR_RADIO = (0,0,128) COLOR_TANGENTE = (128,0,0) COLOR_SECANTE = (0,128,0) COLOR_FINAL = (128,128,0) COLOR_PUNTO = ROJO def cornoide(t, r=1.0): return r*math.cos(t)*math.cos(2*t), r*math.sin(t)*(2+math.cos(2*t)) def dibujar(): global temp_peque, e_peque, fuente, destino destino.fill(BLANCO) for y in range(fuente.get_height()): for x in range(fuente.get_width()): tono = float(fuente.get_at((x,y))[0]) dibujarUnaCornoide(temp_peque, e_peque, int(NUMPASOSMAX + tono*(NUMPASOSMIN-NUMPASOSMAX)/255)) destino.blit(temp_peque, (x*ANCHO,y*ALTO)) print "{}/{}".format(y+1,fuente.get_height()) #Rellenar para hacer cuadrada: x = ANCHODEST for y in range(ALTODEST/(ALTODEST-ANCHODEST)): dibujarUnaCornoide(temp_grande, e_grande, 50, False) destino.blit(temp_grande, (x, y*(ALTODEST-ANCHODEST))) #Agregar la foto pequeña: if not peque: destino.blit(fuente, (x,(y+1)*(ALTODEST-ANCHODEST))) def dibujarUnaCornoide(temporal, e, maximo, peque=True): i = 0 t = 0.0 pcirc = RADIO_CIRCULO*math.cos(t), RADIO_CIRCULO * math.sin(t) i=i+1 temporal.fill(BLANCO) while i<=maximo: #Calcular siguiente punto del cornoide: t = math.pi/2 * i/maximo p = cornoide(t, RADIO_CIRCULO) pr = e.vr(p) #Dibujar círculo: pygame.draw.circle(temporal, COLOR_CIRCULO, e.vr((0.0,0.0)), int(e.magnitudvrx(RADIO_CIRCULO)), GRUESO_CIRCULO) #Centro del círculo: #pygame.draw.circle(temporal, COLOR_PUNTO, e.vr((0.0,0.0)), RADIO_PUNTO) #Punto del círculo: pcirc = RADIO_CIRCULO*math.cos(t), RADIO_CIRCULO * math.sin(t) #Radio: pygame.draw.aaline(temporal, COLOR_RADIO, e.vr((0.0,0.0)), e.vr(pcirc), GRUESO_LINEA) #Recta tangente al círculo: #pygame.draw.aaline(temporal, COLOR_TANGENTE, e.vr(p), e.vr(pcirc), GRUESO_LINEA) ##con esto se prolonga la tangente pendiente = -1.0/math.tan(t) ptan1 = e.minxv, pendiente * (e.minxv - pcirc[0]) + pcirc[1] ptan2 = e.maxxv, pendiente * (e.maxxv - pcirc[0]) + pcirc[1] pygame.draw.aaline(temporal, COLOR_TANGENTE, e.vr(ptan1), e.vr(ptan2), GRUESO_LINEA) #Secante al círculo: pcirc2 = (-pcirc[0], pcirc[1]) pygame.draw.aaline(temporal, COLOR_SECANTE, e.vr(pcirc2), e.vr(pcirc), GRUESO_LINEA) #Segmento final: pygame.draw.aaline(temporal, COLOR_FINAL, e.vr(pcirc2), pr, GRUESO_LINEA) i = i+1 #Dibujar el Cornoide i = 0 while i<NUMPASOSCURVA: t = math.pi/2 * i/NUMPASOSCURVA pr = e.vr(cornoide(t, RADIO_CIRCULO)) pygame.draw.circle(temporal, COLOR_CORNOIDE, pr, GRUESO_CORNOIDE/2) i=i+1 if __name__ == "__main__": global temporal, e, fuente, destino pygame.init() fuente = pygame.image.load(ARCHIVO) destino = pygame.Surface((ANCHODEST+(ALTODEST-ANCHODEST),ALTODEST)) temp_peque = pygame.Surface((ANCHO,ALTO)) e_peque = escala.Escala((ANCHO,ALTO), INF_IZQ, SUP_DER) temp_grande = pygame.Surface((ANCHO*13,ALTO*13)) e_grande = escala.Escala((ANCHO*13,ALTO*13), INF_IZQ, SUP_DER) dibujar() print "Imagen generada. Guardando..." if peque: pygame.image.save(destino, "albertosanchez-2000.png") else: pygame.image.save(destino, "albertosanchez.png") #raw_input("Presione una tecla para salir")
No hay comentarios:
Publicar un comentario