Graphic PIZiadas

Graphic PIZiadas

My world is in..

Recursive Fractals: Sierpinski Triangle [JAVA]

triangulo_sierpinskiWe have seen a first program called “DrawWorld” we introduced the JAVA programming oriented graphics. Veamos como modificar este programa elemental para generar un fractal recursivo básico: The triángulo de Sierpinski.

(See and generating a recursive fractal)

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, we will be getting a new figure recursively. We will have a new level of recursion we can control using a variable (nivel_de_recursividad) of our program.

We have defined a function “paintRecursivo” (I called from the method “paint”) at which point we triangle base, and the recursion. The function calculates the vertices of the triangle, paints the figure and calls itself three times, one for each of the subtriangles.

In each call to the function reduces the value of recursion, so that when it is zero finishes carrying recursion.

import java.applet.Applet;
import java.awt.Graphics;
/**
* @ Author José Juan Aliaga
*/
public class MainApp extends Applet {
 double xp1 = 300;
 double p1 = 300;
 double xp2 = 10;
 double p2 = 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, p1, xp2, p2);
 }

 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-dy * 2 * sin60;
  double yp12 yp32 =  2 * dx   dy * 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

JAVA Course