1 

// Fig. 15.22: FractalJPanel.java

 2 

// FractalJPanel demuestra el dibujo recursivo de un fractal.

 3 

import

 java.awt.Graphics;

 4 

import

 java.awt.Color;

 5 

import

 java.awt.Dimension;

 6 

import

 javax.swing.JPanel;

 7 
 8 

public class

 FractalJPanel 

extends

 JPanel

 9 

{

 10  

private

 Color color; 

// almacena el color utilizado para dibujar el fractal

 11  

private int

 nivel;

// almacena el nivel actual del fractal

 12 
 13  

private final int

ANCHURA

 = 

400

;

// define la anchura de JPanel

 14  

private final int

ALTURA

 = 

400

;   

// define la altura de JPanel

 15 
 16  

// establece el nivel inicial del fractal al valor especificado

 17  

// y establece las especificaciones del JPanel

 18  

public

 FractalJPanel( 

int

 nivelActual )

 19  

{

 20  

 

color = 

Color.BLUE

;

// inicializa el color de dibujo en azul

 21  

 

nivel = nivelActual; 

// establece el nivel inicial del fractal

 22  

 

setBackground(

Color.WHITE

 );

 23  

 

setPreferredSize(

new

 Dimension( 

ANCHURA

,

ALTURA

 ) );

 24  

}

// fin del constructor de FractalJPanel

 25 
 26  

// dibuja el fractal en forma recursiva

 27  

public void

 dibujarFractal( 

int

 nivel, 

int

 xA, 

int

 yA, 

int

 xB, 

 28  

 

int

 yB, Graphics g )

 29  

{

 30  

 

// caso base: dibuja una línea que conecta dos puntos dados

 31  

 

if

 ( nivel == 

0

 ) 

 

32    

g.drawLine( xA, yA, xB, yB );

 33  

 

else

// paso recursivo: determina los nuevos puntos, dibuja el siguiente nivel

 34  

 

{

 

35    

// calcula punto medio entre (xA, yA) y (xB, yB)

 

36    

int

 xC = ( xA + xB ) / 

2

;

 

37    

int

 yC = ( yA + yB ) / 

2

;

 38 
 

39    

// calcula el cuarto punto (xD, yD) que forma un 

 

40    

// triángulo recto isósceles entre (xA, yA) y (xC, yC) 

 

41    

// en donde el ángulo recto está en (xD, yD)

 

42    

int

 xD = xA + ( xC - xA ) / 

2

 - ( yC - yA ) / 

2

;

 

43    

int

 yD = yA + ( yC - yA ) / 

2

 + ( xC - xA ) / 

2

;

 

44    

 

45    

// dibuja el Fractal en forma recursiva

 

46    

dibujarFractal( nivel - 

1

, xD, yD, xA, yA, g );

 

47    

dibujarFractal( nivel - 

1

, xD, yD, xC, yC, g );

 

48    

dibujarFractal( nivel - 

1

, xD, yD, xB, yB, g ); 

 49  

 

}

// fin de else

 50  

}

// fin del método dibujarFractal

 51 
 52  

// inicia el dibujo del fractal

 53  

public void

 paintComponent( Graphics g )

 54  

{

 55  

 

super

.paintComponent( g );

 56 
 57  

 

// dibuja el patrón del fractal

 58  

 

g.setColor( color );

 59  

 

dibujarFractal( nivel, 

100

,

90

,

290

,

200

, g ); 

Figura 15.22

  |  Dibujo del “fractal Lo” mediante el uso de la recursividad. (Parte 1 de 3).

15.8 Fractales 

673

15_MAQ_CAP_15_DEITEL.indd673

4/19/081:29:05AM