Entrada destacada

Como usar enums en Android, kotlin

Dibujando arcos en pygame

A continuación se muestran varios ejemplos de como dibujar arcos utilizando pygame, ya que está figura resulta la mayoría de las veces un poco complicada de comprender a diferencia de las demás.

Para dibujar un arco utilizamos pygame.draw.arc() la cual recibe como primer parámetro la superficie donde se dibujará, después el color que tendrá la figura, el tercer parámetro es una lista con cuatro elementos que definen un rectángulo que contendrá el arco que dibujemos, después el ángulo inicial seguido del ángulo final y por ultimo el grosor de la línea.

El siguiente ejemplo dibuja un arco completo que va de 0° como ángulo inicial a 360° ángulo final.

pygame.draw.arc(pantalla, ROJO, [50, 10, 300, 300], 0, 2 * math.pi)


El ángulo inicial y final están dados en radianes, si no se especifica el grosor de la linea este se dibujará con el grosor por default.

Podemos seguir utilizando directamente radianes para especificar los ángulos del arco o podemos crear una función que convierta grados a radianes.
Python nos brinda una función para convertir grados a radianes sólo tenemos que importar la librería math.
Por lo dicho antes el siguiente ejemplo dibuja un arco con ángulo inicial en 0° y un ángulo final en 180°.

pygame.draw.arc(pantalla, ROJO, [50, 10, 300, 300], 0, math.radians(180))


¿Pero cómo especificamos las medidas del arco y su posición?
Imaginemos un rectángulo con coordenadas (50, 10) en su esquina superior izquierda con ancho de 300 y  un alto igual de 300, este será el contenedor del arco y por tanto sus medidas y su posición.


Entonces para dibujar un arco en la posición (100, 50) con un ancho de 200 y altura de 100 que abre a la izquierda, quedaría de la siguiente forma.
pygame.draw.arc(pantalla, ROJO, [100, 50, 200, 100], math.radians(270), math.radians(450))


Ejemplo Completo


import pygame
import math

ROJO = (255, 0, 0)

pygame.init()

pantalla = pygame.display.set_mode([400, 200])
pygame.display.set_caption("Arcos")

reloj = pygame.time.Clock()
game_over = False

while not game_over:
    for evento in pygame.event.get():
        if evento.type == pygame.QUIT:
            game_over = True
    pantalla.fill([255, 255, 255])
    #pygame.draw.rect(pantalla, (0, 0, 0), [50, 10, 300, 300], 1)
    pygame.draw.arc(pantalla, ROJO, [100, 50, 200, 100], math.radians(270), math.radians(450))
    pygame.display.flip()
    reloj.tick(60)
pygame.quit()


Comentarios