# Ilustrações vetoriais com programação - Aula 3 ### `hackmd.io/@sesc-av-paulista/ilustras-vetoriais-3` #### [índice das aulas](https://hackmd.io/@sesc-av-paulista/ilustras-vetoriais) - Apoio abav.lugaralgum.com/material-aulas - L-System https://abav.lugaralgum.com/material-aulas/Processing-Python-py5/LSystem.html - Desenhos diários https://abav.lugaralgum.com/sketch-a-day/ - Wikipedia https://en.wikipedia.org/wiki/L-system - Mais exemplos de L-Sytem https://hackmd.io/TrN0yfXIR-OlYgsiI563uA ### Métodos dos `strings` - https://docs.python.org/pt-br/3/library/stdtypes.html#string-methods ```python! >>> frase = 'jabuticaba aniversário' >>> texto = '' >>> for letra in frase: if letra == 'a': texto = texto + 'A' else: texto = texto + letra >>> texto 'jAbuticAbA Aniverário' >>> vogais {'a': 'aaahhh', 'e': 'eita', 'i': 'iiiii', 'o': 'oxente', 'u': 'uva'} >>> letra = 'á' >>> vogais.get(letra, letra) 'á' >>> letra = 's' ``` ### Substituição zoeira ```python! >>> frase = 'jabuticaba aniversário' >>> frase 'jabuticaba aniversário' >>> texto = '' >>> vogais {'a': 'aaahhh', 'e': 'eita', 'i': 'iiiii', 'o': 'oxente', 'u': 'uva'} >>> for letra in frase: texto = texto + vogais.get(letra, letra) >>> texto 'jaaahhhbuvatiiiiicaaahhhbaaahhh aaahhhniiiiiveitarsáriiiiioxente' ``` ### Substituição algas Primeiro exemplo com alga ```python! axioma = 'A' regras = { 'A': 'AB', 'B': 'A', } frase_inicial = axioma for i in range(15): frase_resultado = '' for simbolo in frase_inicial: frase_resultado = frase_resultado + regras.get(simbolo, simbolo) frase_inicial = frase_resultado print(frase_resultado) ``` ### Desenho estilo tartaruga Movendo a origem (o 0, 0) e girando o papel ![image](https://hackmd.io/_uploads/HyNkPe_0xg.png) Tartaruga que volta a um ponto anterior ![image](https://hackmd.io/_uploads/SJzzcl_Aee.png) #### Exemplo de L-System ![image](https://hackmd.io/_uploads/HJ6RCl_Axe.png) ```python! axioma = '-X' regras = { 'X': ' F+[[X]-X]-F[-FX]+X', 'F': 'FF', } passo = 1.5 angulo = 25 # graus frase_inicial = axioma for i in range(7): frase_resultado = '' for simbolo in frase_inicial: frase_resultado = frase_resultado + regras.get(simbolo, simbolo) frase_inicial = frase_resultado #print(frase_resultado) print(len(frase_resultado)) def setup(): size(800, 500) translate(150, 450) for simbolo in frase_resultado: if simbolo == 'F': line(0, 0, 0, -passo) translate(0, -passo) elif simbolo == '-': rotate(radians(angulo)) elif simbolo == '+': rotate(radians(-angulo)) elif simbolo == '[': push_matrix() elif simbolo == ']': pop_matrix() ``` ### Ajustando ângulo interativamente com o teclado ![image](https://hackmd.io/_uploads/ryEeif-y-x.png) Use as teclas `a` e `z` para mudar o ângulo! ```python= axioma = 'Y' regras = { 'X': 'X[-FFF][+FFF]FX', 'Y': 'YFX[+Y][-Y]', } passo = 1.5 angulo = 25.7 # graus frase_inicial = axioma for i in range(7): frase_resultado = '' for simbolo in frase_inicial: frase_resultado = frase_resultado + regras.get(simbolo, simbolo) frase_inicial = frase_resultado #print(frase_resultado) print(len(frase_resultado)) def setup(): size(500, 500) def draw(): background(240, 240, 200) translate(250, 450) for simbolo in frase_resultado: if simbolo == 'F': line(0, 0, 0, -passo) translate(0, -passo) elif simbolo == '-': rotate(radians(angulo)) elif simbolo == '+': rotate(radians(-angulo)) elif simbolo == '[': push_matrix() elif simbolo == ']': pop_matrix() def key_pressed(): global angulo if key == 'a': angulo = angulo - 1 if key == 'z': angulo = angulo + 1 ``` ```