Árbol Fractal en Java


Hola, hace tiempo no me pasaba por la página, en esta ocasión les traigo un tutorial de como realizar Árboles Fractales en Java.

Si no estás familiarizado con el término, visita el siguiente post: Fractales

El resultado que obtendremos será el siguiente:

Aquí les dejo el proyecto en GitLab para los que quieran clonarlo:

https://gitlab.com/pptavo/ArbolFractal

Tutorial: Importar Proyecto Git a Netbeans

Empecemos el turorial:

En este tutorial explicaré solo los métodos de creación de fractales que se encuentran en el proyecto antes mencionado.

En la clase Arbol.java

Encontramos el siguiente constructor:

 

el cual asigna a la variable xi (que contiene la posicion inicial en X del árbol) como el tamaño de ancho del panel contenedor dividido entre 2.

A la variable yi que contiene la posicion inicial en Y del arbol se le asigna el alto total del contenedor, para de esta manera, situarlo en la parte inferior del jPanel.

las variables tamanoianguloi se refieren al tamaño y posición angular del tronco del árbol, es decir, el tronco principal se encuentra a 90º negativos (en contra de las manecillas del reloj) y mide 50 pixeles de alto.

El método iniciar()

[java]private void iniciar(){
profundidadi = sliderprof.getValue();
Graphics g = jPanel1.getGraphics();
g.setColor(Color.black);
g.fillRect(0, 0, jPanel1.getWidth(), jPanel1.getHeight());
Dibujar(g, xi, yi, anguloi, profundidadi, tamanoi);
}[/java]

Obtiene el objeto Graphics de nuestro jPanel contenedor, y lo pinta de negro, enseguida llama al método Dibujar.

 

Método Dibujar() :

[java]private void Dibujar(Graphics g, int x1, int y1, double angulo, int profundidad, int tamano) {
if (profundidad == 0) return;
Graphics2D g2 = (Graphics2D) g;
g.setColor(Color.GREEN);
g2.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);//Filtro antialiasing

int x2 = x1 + (int) (Math.cos(Math.toRadians(angulo)) * tamano);
int y2 = y1 + (int) (Math.sin(Math.toRadians(angulo)) * tamano);
g2.drawLine(x1, y1, x2, y2);
Dibujar(g2, x2, y2, angulo – 20, profundidad – 1, (int) (tamano*.9));
Dibujar(g2, x2, y2, angulo + 20, profundidad – 1, (int) (tamano*.9));
}[/java]

Éste es un método recursivo (se llama a sí mismo), lo que hace es obtener las componentes en X y en Y segun el ángulo y hacer una linea desde x1,y1 hasta x2,y2, luego manda llamarse 2 veces (el árbol va creando 2 ramas nuevas en cada nivel), la rama izquierda le resta 20 grados al angulo, y la rama derecha le suma 20, así como le va restando un 10% a su longitud.

Éste método dibujaría el arbol completo dependiendo de cuantos niveles de profundidad escojamos, será el tiempo que tarde en dibujarlo completamente.


Sobre Gustavo Zimbrón 181 artículos
Apasionado por la programación y la tecnología, me gustan los retos y aprender siempre cosas nuevas.
Subscribe
Notify of
guest

2 Comentarios
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Lnoc

Excelente