Árvore Recursiva
Explorando a Beleza da Matemática
na Natureza através da Programação em Java
Um exemplo fascinante disso é a simulação de uma Árvore Recursiva. Este algoritmo, inspirado em padrões naturais, usa conceitos matemáticos para criar uma estrutura que se assemelha às ramificações de uma árvore real. A recursividade, que é a repetição de um processo de forma aninhada, é o coração dessa técnica. Ela nos mostra como a simplicidade matemática pode gerar complexidade e beleza.
Ao visualizar essas simulações, podemos apreciar não só a estética dos padrões gerados, mas também a lógica e a precisão com que a matemática descreve o mundo natural. Programar esse tipo de padrão é mais do que um exercício técnico; é uma forma de conectar o abstrato da matemática com o tangível da natureza.
Então, da próxima vez que observarmos uma árvore ou outro padrão natural, podemos lembrar que por trás dessa beleza existe uma estrutura matemática que pode ser compreendida, modelada e até recriada através da programação.
Árvore Recursiva
Renderizando uma estrutura simples semelhante a uma árvore por meio de recursão. O ângulo de ramificação é calculado em função da localização horizontal do mouse. Mova o mouse para a esquerda e para a direita para alterar o ângulo.
Exemplo com Processing:
O Processing, pra quem não sabe, é uma linguagem baseado em Java e usa uma sintaxe simplificada para tornar a programação mais acessível, especialmente para artistas e designers. O código Processing é escrito em uma sintaxe própria que, por trás dos panos, é convertido em código Java e executado na máquina virtual Java (JVM). Então, pode-se dizer que o Processing combina elementos de uma linguagem e um IDE em um só pacote.
Link com tutorial de instalaço do Processing:
https://projetocybernetico.blogspot.com/2022/11/introducao-ao-processing.html
Código:
float theta;
void setup() {
size(640, 360);
}
void draw() {
background(0);
frameRate(30);
stroke(255);
// Vamos escolher um ângulo de 0 a 90 graus com base na posição do mouse
float a = (mouseX / (float) width) * 90f;
// Converte para radianos
theta = radians(a);
// Inicia a árvore na parte inferior da tela
translate(width/2,height);
// Desenha uma linha de 120 pixels
line(0,0,0,-120);
// Move para o final dessa linha
translate(0,-120);
// Inicia a ramificação recursiva!
branch(120);
}
void branch(float h) {
// Cada ramo terá 2/3 do tamanho do anterior
h *= 0.66;
// Todas as funções recursivas devem ter uma condição de saída!!!!
// Aqui, o nosso é quando o comprimento do ramo é de 2 pixels ou menos
if (h > 2) {
pushMatrix(); // Salve o estado atual da transformação (ou seja, onde estamos agora)
rotate(theta); // Gira em theta
line(0, 0, 0, -h); // Desenhe o galho
translate(0, -h); // Mover para o final do ramo
branch(h); // Ok, agora me chamo para desenhar dois novos galhos!!
popMatrix(); // Sempre que voltamos aqui, "pop" para restaurar o estado anterior da matriz
//Repita a mesma coisa, apenas ramificando para a "esquerda" desta vez!
pushMatrix();
rotate(-theta);
line(0, 0, 0, -h);
translate(0, -h);
branch(h);
popMatrix();
}
}
#MatemáticaNaNatureza #Programação #Java #PadrõesNaturais #Ciência #Tecnologia #ÁrvoreRecursiva #Simulação #Natureza #Educação #Inovação #Algoritmos #CodingLife #Desenvolvimento #ArteDigital #Matemática #LinguagemDeProgramação #Programador #Engenharia #STEM #CiênciaEDados #Computação
0 Comentários