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