Created
November 5, 2020 15:59
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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