Anda di halaman 1dari 4

FRACTALES

Un fractal es una figura geometrica que puede ser generada a partir de un


patron repetido recursivamente (Fig. 15.15). La figura es modificada
aplicando el patron a cada segmento de la figura original.
Como ejemplo, veamos un popular fractal estrictamente auto-similar conocido
como la Curva de Koch (Fig. 15.15). Este fractal se forma eliminando la
tercera parte de en medio de cada lnea en el dibujo, reemplazandola con dos
lneas que forman un punto, tal que si la tercera mitad de la linea original
queda, se pudiera formar un tringulo equiltero. El patrn para este fractal
ya fue determinado, por lo que lo nico que se determinar ser su uso como
una solucin recursiva.

Fig. 15.15

FRACTALES
Para ir de la lnea recta a las 4 lneas que forman la iteracin de Koch
necesitamos lo siguiente:

Con estas formulas llegamos a los puntos P1, P2 y P3:

Una vez tenemos las ecuaciones, el algoritmo es bastante sencillo:


Vonkoch(punto P1, punto P5, int n) {
Si (n=1)
Hacer linea entre P1 y P5
Sino
Encontrar los 3 puntos intermedios P2, P3 y P4
Vonkoch(P1, P2, n-1)
Vonkoch(P2, P3, n-1)
Vonkoch(P3, P4, n-1)
Vonkoch(P4, P5, n-1)
}

Y la implementacin en Java sera:

FRACTALES
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.Graphics;
/**
* @Aldo Jesus Castellanos Martinez
*/
public class Copo extends JFrame {
double xp1 = 600;
double yp1 = 300;
double xp2 = 10;
double yp2 = 300;
double sin60 = Math.sin(3.14 / 3.);
int nivel_de_recursividad = 0;
JButton r;
JTextField rt;
JPanel p;
public Copo(int r) {
super ("Fractal");
nivel_de_recursividad = r;
Container c = getContentPane();
setBackground( Color.blue);
c.setLayout(new FlowLayout());
this.setSize(700,700);
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
Copo a = new Copo(Integer.parseInt(JOptionPane.showInputDialog
("Nivel de recursividad")));
}
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) / 3.;
double dy = (yp22 - yp12) / 3.;
double xx = xp12 + 3 * dx / 2. - dy * sin60;
double yy = yp12 + 3 * dy / 2. + dx * sin60;
if (i <= 0) {
g.drawLine((int)xp12,(int)yp12,(int)xp22,(int)yp22);
g.drawLine((int)xx,(int)yy,(int)xp12,(int)yp12);
g.drawLine((int)xp22,(int)yp22,(int)xx,(int)yy);
}

FRACTALES
else {
paintRecursivo(g,i - 1,xp12,yp12,xp12+dx,yp12+dy);
paintRecursivo(g,i - 1,xp12+dx,yp12+dy,xx,yy);
paintRecursivo(g,i - 1,xx,yy,xp22-dx,yp22-dy);
paintRecursivo(g,i - 1,xp22-dx,yp22-dy,xp22,yp22);
g.drawLine((int) xp12,(int) yp12,(int) xp22,(int) yp22);
g.drawLine((int) xp12,(int) yp12,(int) xp22,(int) yp22);
}
}
}

Anda mungkin juga menyukai