Skip to content

Instantly share code, notes, and snippets.

@berinhard
Created November 5, 2020 15:59
Show Gist options
  • Save berinhard/d5a29e4839fb1bda2b1e71fa2d05d67e to your computer and use it in GitHub Desktop.
Save berinhard/d5a29e4839fb1bda2b1e71fa2d05d67e to your computer and use it in GitHub Desktop.
Ess script implementa padrões por rotação e simetria no Processing em modo Python. Ele é uma versão final resultada da preparação para a palestra "Simetrias Pythônicas" apresentada na PythonBrasil 2020 por Bernardo Fontes
# Author: Berin
# Sketches repo: https://github.com/berinhard/sketches
largura = 900
altura = 900
tam_modulo = largura / 2
def modulo():
noStroke()
# quadrado para fundo branco
fill(230)
rect(0, 0, tam_modulo, tam_modulo)
# triângulo azul no canto superior esquerdo
fill(0, 0, 180)
triangle(0, 0, tam_modulo, 0, 0, tam_modulo)
# círculo no canto inferior direito
fill(0, 180, 0)
circle(0.75 * tam_modulo, 0.75 * tam_modulo, 200)
# quadrado para tornar mais complexo
fill(180, 0, 180)
rect(0.25 * tam_modulo, tam_modulo / 2, 100, 100)
fill(180, 180, 0)
rect(tam_modulo / 2, 0.25 * tam_modulo, 100, 100)
class Quadrante:
def __enter__(self, *args, **kwargs):
pushMatrix()
self.prepara()
def __exit__(self, *args, **kwargs):
popMatrix()
class QuadranteRotacao(Quadrante):
def __init__(self, x, y, angulo):
self.x, self.y = x, y
self.angulo = angulo
def prepara(self):
translate(self.x, self.y)
rotate(self.angulo)
class QuadranteSimetria(Quadrante):
def __init__(self, x, y, escala):
self.x, self.y = x, y
self.escala = escala
def prepara(self):
translate(self.x, self.y)
scale(*self.escala)
quadrantes_angulos = [
QuadranteRotacao(0, 0, 0),
QuadranteRotacao(largura, 0, HALF_PI),
QuadranteRotacao(0, altura, 3 * HALF_PI),
QuadranteRotacao(largura, altura, 2 * HALF_PI)
]
quadrantes_simetrias = [
QuadranteSimetria(0, 0, (1, 1)),
QuadranteSimetria(largura, 0, (-1, 1)),
QuadranteSimetria(0, altura, (1, -1)),
QuadranteSimetria(largura, altura, (-1, -1)),
]
def setup():
size(largura, altura)
quadrantes = quadrantes_angulos
#quadrantes = quadrantes_simetrias
for quadrante in quadrantes:
with quadrante:
modulo()
for quadrante in quadrantes:
fill(210, 0, 0)
circle(quadrante.x, quadrante.y, 25)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment