# Grupo de estudos em Python ## L-System ### `hackmd.io/@sesc-av-paulista/estudos-em-python-3-abril` - Python no Browser - pyodide - [pyp5js editor](https://abav.lugaralgum.com/pyp5js/py5mode/) - https://pyscript.net/ - Thonny + py5 - https://abav.lugaralgum.com/como-instalar-py5/ - Referências L-System - https://abav.lugaralgum.com/material-aulas/Processing-Python-py5/LSystem.html - http://www.paulbourke.net/fractals/lsys/ Exportando animações - https://abav.lugaralgum.com/material-aulas/Processing-Python-py5/exportar_animacoes.html ```python= axioma = 'A' regras = { 'A': 'AB', 'B': 'A', } frase_inicial = axioma for _ in range(15): nova_frase = '' for letra in frase_inicial: nova_frase = nova_frase + regras.get(letra) frase_inicial = nova_frase print(len(nova_frase)) ``` ![image](https://hackmd.io/_uploads/rk7w88nTJl.png) ```python= axioma = '-X' regras = { "X": "F+[[X]-X]-F[-FX]+X", "F": "FF" } angulo = 25 # em graus passo = 1 def setup(): size(700, 700) frase_inicial = axioma for _ in range(8): nova_frase = '' for letra in frase_inicial: nova_frase = nova_frase + regras.get(letra, letra) frase_inicial = nova_frase print(len(nova_frase)) translate(150, 650) for letra in nova_frase: if letra == 'F': line(0, 0, 0, -passo) translate(0, -passo) if letra == '+': rotate(radians(-angulo)) if letra == '-': rotate(radians(angulo)) if letra == '[': push_matrix() if letra == ']': pop_matrix() ``` Outra ```python= axioma = 'F' regras = { "F": " FF[+FF-F-FO][-FF+F+FO]" } angulo = 22.5 # em graus passo = 7 def setup(): global nova_frase size(700, 700) frase_inicial = axioma for _ in range(4): nova_frase = '' for letra in frase_inicial: nova_frase = nova_frase + regras.get(letra, letra) frase_inicial = nova_frase print(len(nova_frase)) def draw(): background(200) translate(350, 650) for letra in nova_frase: if letra == 'F': line(0, 0, 0, -passo) translate(0, -passo) if letra == '+': rotate(radians(-angulo)) if letra == '-': rotate(radians(angulo)) if letra == '[': push_matrix() if letra == ']': pop_matrix() if letra == 'O': fill(255, 0, 0) # vermelho no_stroke() circle(0, 0, passo / 2) stroke(0) def key_pressed(): global angulo if key == 'z': angulo = angulo - 1 elif key == 'a': angulo = angulo + 1 print(angulo) ``` # em treis dê! ![out-ezgif.com-optimize](https://hackmd.io/_uploads/Sk8pRL36kl.gif) ```python= axioma = 'F' regras = { "F": " FF+[+FF-F-FO]-[-FF+F+FO]" } angulo = 22.5 # em graus passo = 7 def setup(): global nova_frase size(700, 700, P3D) frase_inicial = axioma for _ in range(4): nova_frase = '' for letra in frase_inicial: nova_frase = nova_frase + regras.get(letra, letra) frase_inicial = nova_frase print(len(nova_frase)) def draw(): background(200) translate(350, 650) rotate_y(frame_count / 30) for letra in nova_frase: if letra == 'F': line(0, 0, 0, -passo) translate(0, -passo) rotate_y(angulo) if letra == '+': rotate(radians(-angulo)) if letra == '-': rotate(radians(angulo)) if letra == '[': push_matrix() if letra == ']': pop_matrix() if letra == 'O': fill(255, 0, 0) # vermelho no_stroke() circle(0, 0, passo / 2) stroke(0) def key_pressed(): global angulo if key == 'z': angulo = angulo - 1 elif key == 'a': angulo = angulo + 1 print(angulo) ```