PIZiadas gráficas

PIZiadas gráficas

Mi mundo es la imagen.

Fractales recursivos: Triángulo de Sierpinski [JAVA]

triangulo_sierpinskiHemos visto un primer programa denominado “DrawWorld” que nos introducía la programación en JAVA orientada a los gráficos. Veamos como modificar este programa elemental para generar un fractal recursivo básico: El triángulo de Sierpinski.

(Ver como se genera un fractal recursivo)

Es un fractal que se construye de forma recursiva a partir de un triángulo cuyos lados se dividen por su punto medio. Con estos nuevos puntos, y los anteriores, se construyen nuevos triángulos semejantes al anterior.

Si partimos de un triángulo ABC y obtenemos los puntos medios de sus lados (MNP), el siguiente nivel de recursividad se obtendrá construyendo los tres triángulos siguientes: APN, PBM y NMC.

El triángulo de Sierpinski tiene una dimensión fractal de Hausdorff-Besicovitch coincidente con su dimensión fractal de homotecia igual a: 1,58496… (W)

Si cada uno de estos nuevos triángulos se divide a su vez en tres, estaremos obteniendo una nueva figura de forma recursiva. Tendremos un nuevo nivel de recursividad que podemos controlar mediante una variable (nivel_de_recursividad) de nuestro programa.

Se ha definido una función “paintRecursivo” (que se llama desde el método “paint”) a la que pasamos los puntos de la base del triángulo, así como el nivel de recursividad. La función calcula los vértices del triángulo, pinta la figura y se llama a sí misma tres veces, una para cada uno de los subtriángulos.

En cada llamada a la función se reduce el valor de recursividad, de forma que cuando éste es cero termina de efectuar la recursividad.

import java.applet.Applet;
import java.awt.Graphics;
/**
* @author José Juan Aliaga
*/
public class MainApp extends Applet {
 double xp1=300;
 double yp1=300;
 double xp2=10;
 double yp2=300;
 double sin60=Math.sin(3.14/3.);
 int nivel_de_recursividad=6;

 public MainApp() { }

 public static void main(String[] args) { }

 public void paint(Graphics g){
   paintRecursivo(g,nivel_de_recursividad,xp1,yp1,xp2,yp2);
 }

 private void paintRecursivo(Graphics g, int i, double xp12, double yp12, double xp22, double yp22 ) {

 double dx=(xp22-xp12)/2.;
  double dy=(yp22-yp12)/2.;
  double xp32=xp12+dx-2*dy*sin60;
  double yp32=yp12+dy+2*dx*sin60;

  double dx1=(xp22+xp12)/2.;
  double dy1=(yp22+yp12)/2.;
  double dx2=(xp32+xp22)/2.;
  double dy2=(yp32+yp22)/2.;
  double dx3=(xp12+xp32)/2.;
  double dy3=(yp12+yp32)/2.;

  if(i<=0){
   g.drawLine((int)xp12,(int)yp12,(int)xp22,(int)yp22);
   g.drawLine((int)xp22,(int)yp22,(int)xp32,(int)yp32);
   g.drawLine((int)xp32,(int)yp32,(int)xp12,(int)yp12);
  }
  else{
   paintRecursivo(g,i-1,xp12,yp12,dx1,dy1);
   paintRecursivo(g,i-1,dx1,dy1,xp22,yp22);
   paintRecursivo(g,i-1,dx3,dy3,dx2,dy2);
  }

 }
}
JAVA

Curso JAVA


Related Posts

  • Fractales recursivos: Curva de Koch [JAVA]Fractales recursivos: Curva de Koch [JAVA] Hemos visto un primer programa denominado "DrawWorld" que nos introducía la programación en JAVA orientada a los gráficos. Este módulo de programación nos ha servido para ver un primer fractal recursivo: El triángulo de Sierpisnki. Veamos como modificar este programa elemental para […]
  • Programación gráfica: Interacción : Eventos de ratón [JAVA]Programación gráfica: Interacción : Eventos de ratón [JAVA] Después de crear el entorno gráfico básico y el motor de animación, introduciremos las primeras nociones de interacción por medio de la incorporación del modelo de eventos del ratón. La técnica consistirá en generar un evento o suceso cada vez que se interactua con el ratón. Este […]
  • Programación gráfica: Motor gráfico de animación [JAVA]Programación gráfica: Motor gráfico de animación [JAVA] Después de definir un primer interface para dibujar los objetos gráficos en JAVA, vamos a implementar un motor gráfico de animación que nos permita gestionar la dinámica de la aplicación y, posteriormente, añadir interacción con el usuario. El motor se encargará de llamar a las […]
  • Programación gráfica: Doblebuffering : Dibujar en segundo plano [JAVA]Programación gráfica: Doblebuffering : Dibujar en segundo plano [JAVA] Al crear el motor de animación hemos visto que al refrescar la pantalla se produce un parpadeo indeseable. Este efecto es consecuencia del tiempo que se necesita para borrar la imagen y generar la nueva actualizada, resultado de animar los objetos. Una técnica para evitar esto es la […]
  • Programación gráfica: Iniciar la construcción de la librería gráfica [JAVA]Programación gráfica: Iniciar la construcción de la librería gráfica [JAVA] Tras instalar el entorno de desarrollo (IDE) de Eclipse y crear un nuevo proyecto, hemos añadido un programa al proyecto Eclipse. El siguiente paso es empezar a estructurar la aplicación iniciando la construcción de los elementos de la biblioteca gráfica.
  • Programación gráfica: Objetos e interfaces orientados a gráficos [JAVA]Programación gráfica: Objetos e interfaces orientados a gráficos [JAVA] El siguiente paso en el tutorial de programación gráfica es definir un interface que será una clase JAVA que permita definir la acción de dibujar los gráficos y asignársela a los objetos, de forma que la clase encargada de pintarlos los reconozca adecuadamente.