Skip to content

Instantly share code, notes, and snippets.

@elgartoinf
Last active May 23, 2019 23:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save elgartoinf/08ffaad727b0807d24ed1d74f9cb5f32 to your computer and use it in GitHub Desktop.
Save elgartoinf/08ffaad727b0807d24ed1d74f9cb5f32 to your computer and use it in GitHub Desktop.
import pygame
import math
ANCHO=800
ALTO=500
ROJO=[255,0,0]
BLANCO=[255,255,255]
NEGRO=[0,0,0]
VERDE=[0,255,0]
CENTRO=[int(ANCHO/2),int(ALTO/2)]
####### dibujar #######
#pygame.draw.circle(pantalla, color, posicion, ancho)
#pygame.draw.line(pantalla,color,posicioninicial,posicionfinal)
#pygame.draw.polygon(pantalla,color,listadelistadeposiciones)
###### reloj #####
#reloj= pygame.time.Clock()
#reloj.tick(tiempoensegundos)
"""
llamar a la variable de pantalla como: pantalla
funcion para dibujar el plano carteciano dando lo siguiente
centro: centro del plano cartesiano
"""
def dibujar_plano_carteciano(CENTRO):
xini=[0,CENTRO[1]]
xfin=[ANCHO,CENTRO[1]]
yini=[CENTRO[0],0]
yfin=[CENTRO[0],ALTO]
pygame.draw.line(pantalla,ROJO,xini,xfin)
pygame.draw.line(pantalla,ROJO,yini,yfin)
"""
funcion para convertir de pantalla en carteciano dando lo siguiente:
centro: centro del plano carteciano en posicion de pantalla
punto: punto que se desea convertir
retorna: lista con x,y en cartesiano
"""
def convertir_carteciano(centro, punto):
xp=punto[0]+centro[0]
yp=centro[1]-punto[1]
return[xp,yp]
"""
funcion para rotar un punto sin punto fijo dado lo siguiente:
x: posicion en x del punto
y: posicion en y del punto
angulo: angulo que se desea rotar
retorna una tupla con los puntos rotados
"""
def rotacion_sin_punto_fijo(x,y,angulo):
nuevaX = int(x * math.cos(math.radians(angulo)) - y * math.sin(math.radians(angulo)))
nuevaY = int(x * math.sin(math.radians(angulo)) + y * math.cos(math.radians(angulo)))
return (nuevaX,nuevaY)
"""
funcion para trasladar un punto a otro dado lo siguiente:
punto: punto que se quiere trasladar
valorTraslado: punto donde se quiere trasladar
retorna tupla con los puntos trasladados
"""
def trasladar(punto, valorTraslado):
return (valorTraslado[0]-punto[0],valorTraslado[1]-punto[1],)
"""
funcion para escalar un punto dado lo siguiente:
punto: punto que se quiere escalar
valorEscalar: lista con los valores para escalar
retorna tupla con los puntos escalados
"""
def escalar(punto,valorEscalar):
return (valorEscalar[0]*punto[0],valorEscalar[1]*punto[1],)
"""
funcion para rotación con punto fijo anti horaria dado lo siguiente:
punto: punto que se quiere rotar
puntoFijo: punto sobre el que se quiere rotar
angulo: angulo de rotación
retorna una lista con los puntos rotados
"""
def rotacion_punto_fijo_anti_horaria(punto,puntoFijo,angulo):
anguloRadianes = math.radians(-angulo)
return [
int(math.cos(anguloRadianes)*(punto[0]-puntoFijo[0])-math.sin(anguloRadianes)*(punto[1]-puntoFijo[1]) + puntoFijo[0]),
int(math.sin(anguloRadianes)*(punto[0]-puntoFijo[0])+math.cos(anguloRadianes)*(punto[1]-puntoFijo[1]) + puntoFijo[1])
]
"""
funcion para rotación con punto fijo horaria dado lo siguiente:
punto: punto que se quiere rotar
puntoFijo: punto sobre el que se quiere rotar
angulo: angulo de rotación
retorna una lista con los puntos rotados
"""
def rotacion_punto_fijo_horaria(punto,puntoFijo,angulo):
anguloRadianes = math.radians(angulo)
return [
int(math.cos(anguloRadianes)*(punto[0]-puntoFijo[0])-math.sin(anguloRadianes)*(punto[1]-puntoFijo[1]) + puntoFijo[0]),
int(math.sin(anguloRadianes)*(punto[0]-puntoFijo[0])+math.cos(anguloRadianes)*(punto[1]-puntoFijo[1]) + puntoFijo[1])
]
"""
función para convertir de cartecianas en polares dado lo siguiente:
x: posicion en x
y: posicion en yi
retorna tupla con el r y angulo
"""
def convertir_cateciano_polares(x, y):
rho = math.sqrt(x**2 + y**2)
phi = math.atan2(y, x)
return(int(rho), int(phi))
"""
función para convertir de polares en cartecianas dado lo siguiente:
rho: r de la polar
angulo: angulo
retorna tupla con x,y
"""
def convertir_polares_carteciano(rho, angulo):
x = rho * math.cos(angulo)
y = rho * math.sin(angulo)
return(int(x), int(y))
if __name__== '__main__':
pygame.init()
pantalla=pygame.display.set_mode([ANCHO,ALTO])
dibujar_plano_carteciano(CENTRO)
pygame.display.flip() #refrescar
fin=False
while not fin:
for event in pygame.event.get():
#eventos
#si oprime el mouse
#if event.type == pygame.MOUSEBUTTONDOWN:
#si oprime una tecla
#if event.type == pygame.KEYDOWN:
#si es izquierda
# if event.key == pygame.K_RIGHT:
#si es derecha
# if event.key == pygame.K_LEFT:
#si es abajo
# if event.key == pygame.K_DOWN:
# si es arriba
# if event.key == pygame.K_UP:
if event.type == pygame.QUIT:
fin = True
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment