PABLETE EN LA RED
Página dedicada a Ana Rosa Fernández Sánchez

3.4. LISTADO DEL PROGRAMA

// Visualizador de los conjuntos de MANDELBROT, de JULIA y de PICKOVER con Zoom. // Applet programado por Pablo López Cienfuegos con JDK 1.0.2. // CREADO......... 28/04/98. // MODIFICADO..... 28/05/98. import java.awt.*; //Biblioteca para la interface de usuario. import java.applet.*; //Biblioteca para el Applet. public class dao extends Applet { //Defino dao como una subclase de la clase Applet. public String getAppletInfo(){ //Preparo la información sobre el autor del Applet. return ("\n"+ "Applet programado para las prácticas de D.A.O. del curso 97/98.\n"+ "\n"+ "Desarrollado por Pablo López Cienfuegos con JDK 1.0.2.\n"+ "http://www.fortunecity.com/skyscraper/corel/284/\n"+ "pablete.en.la.red@eudoramail.com\n"+ "\n"+ "CREADO\t\t28/04/98.\n"+ "MODIFICADO\t28/05/98."); } //Declaración de variables globales al Applet. double x1,y1,x2,y2; //Vértices del plano complejo a estudiar. double LONG_X = 400.0; //La coordenada X oscila entre 0 y 400. double LONG_Y = 300.0; //La coordenada Y oscila entre 0 y 300. int OPCION = 1; //Al iniciarse, el Applet muestra información sobre el autor. int AUMENTO = 3; //El Zoom aumenta el dibujo x3. int NMAX = 75; //Nº máximo de iteraciones. int COTA = 5; //Salida de órbita. int BORDE = 100; //Borde superior para el título del Applet. //Fin de la declaración de las variables globales. void botDibujar_Clicked(Event event) { //Función que gestiona la pulsación del botón DIBUJAR. if(OPCION==5){ //Tenemos que dibujar el conjunto de Julia. OPCION = 3; } else if(OPCION==6){ //Tenemos que dibujar el conjunto de Pickover. OPCION = 4; } else if(OPCION==7){ //Tenemos que dibujar el conjunto de Mandelbrot. OPCION = 2; } //Redibujamos el Applet. repaint(); } void botPikover_Clicked(Event event) { //Función que gestiona la pulsación del botón PICKOVER. OPCION = 6; //Plano complejo a explorar inicialmente. x1 = -2.0; y1 = 1.5; x2 = 2.0; y2 = -1.5; //Redibujamos el Applet. repaint(); } void botJulia_Clicked(Event event){ //Función que gestiona la pulsación del botón JULIA. OPCION = 5; //Plano complejo a explorar inicialmente. x1 = -2.0; y1 = 1.5; x2 = 2.0; y2 = -1.5; //Redibujamos el Applet. repaint(); } void botMandel_Clicked(Event event){ //Función que gestiona la pulsación del botón MANDELBROT. OPCION = 7; //Plano complejo a explorar inicialmente. x1 = -2.5; y1 = 1.5; x2 = 1.5; y2 = -1.5; //Redibujamos el Applet. repaint(); } void botAutor_Clicked(Event event){ //Función que gestiona la pulsación del botón AUTOR. OPCION = 1; //Redibujamos el Applet. repaint(); } void dao_MouseDown(Event evento){ //Función que gestiona el manejo del Zoom con el ratón. if(OPCION!=1 && evento.clickCount==2 && !evento.metaDown()){ //Manejamos el botón principal.(Incrementar el aumento). //Longitud de los lados del recinto a explorar actual. double xx = x2-x1; double yy = y2-y1; //Nuevos vértices del recinto. x1 += xx*(evento.x-LONG_X/AUMENTO/2.)/LONG_X; y1 += yy*(evento.y-BORDE-LONG_Y/AUMENTO/2.)/LONG_Y; x2 = x1+xx/AUMENTO; y2 = y1+yy/AUMENTO; //Redibujamos el Applet. repaint(); } else if(OPCION!=1 && evento.clickCount==2 && evento.metaDown()){ //Manejamos el botón secundario.(Disminuir el aumento). //Longitud de los lados del recinto a explorar actual. double xx = x2-x1; double yy = y2-y1; //Nuevos vértices del recinto. x1 += xx*(evento.x-LONG_X*AUMENTO/2.)/LONG_X; y1 += yy*(evento.y-BORDE-LONG_Y*AUMENTO/2.)/LONG_Y; x2 = x1+xx*AUMENTO; y2 = y1+yy*AUMENTO; //Redibujamos el Applet. repaint(); } } public void init(){ //Inicialización del Applet. super.init(); setLayout(null); addNotify(); resize(550,400); setFont(new Font("Dialog", Font.PLAIN, 16)); setBackground(new Color(2936787)); //Definimos la etiqueta del título. titulo = new java.awt.Label("Conjuntos de Mandelbrot, de Julia, y de Pickover.",Label.CENTER); titulo.reshape(25,0,500,25); titulo.setFont(new Font("Dialog", Font.BOLD, 18)); add(titulo); //Definimos la etiqueta de los mensajes. mensaje = new java.awt.Label("",Label.CENTER); mensaje.reshape(25,25,500,20); mensaje.setFont(new Font("Dialog", Font.BOLD, 14)); add(mensaje); //Definimos el botón que muestra la opción de AUTOR. bot_autor = new java.awt.Button("Autor"); bot_autor.reshape(420,160,110,25); bot_autor.setFont(new Font("Dialog", Font.BOLD, 16)); add(bot_autor); //Definimos el botón que muestra la opción de MANDELBROT. bot_mandel = new java.awt.Button("Mandelbrot"); bot_mandel.reshape(420,220,110,25); bot_mandel.setFont(new Font("Dialog", Font.BOLD, 16)); add(bot_mandel); //Definimos el botón que muestra la opción de JULIA. bot_julia = new java.awt.Button("Julia"); bot_julia.reshape(420,280,110,25); bot_julia.setFont(new Font("Dialog", Font.BOLD, 16)); add(bot_julia); //Definimos el botón que muestra la opción de PICKOVER. bot_pikover = new java.awt.Button("Pickover"); bot_pikover.reshape(420,340,110,25); bot_pikover.setFont(new Font("Dialog", Font.BOLD, 16)); add(bot_pikover); //Definimos el botón que muestra la opción de DIBUJAR. bot_dibujar = new java.awt.Button("Dibujar"); bot_dibujar.disable(); bot_dibujar.reshape(420,70,110,25); bot_dibujar.setFont(new Font("Dialog", Font.BOLD, 16)); add(bot_dibujar); //Definimos la entrada para la parte real de la semilla. text_real = new java.awt.TextField(); text_real.setText("XXXXXXXXXX"); text_real.reshape(40,70,100,25); add(text_real); //Definimos la entrada para la parte imaginaria de la semilla. text_imag = new java.awt.TextField(); text_imag.setText("XXXXXXXXXX"); text_imag.reshape(220,70,100,25); add(text_imag); //Definimos la etiqueta que identifica la entrada para la parte real. eti_real = new java.awt.Label("Parte real:"); eti_real.reshape(40,50,130,20); eti_real.setFont(new Font("Dialog", Font.BOLD, 14)); eti_real.setForeground(new Color(0)); eti_real.setBackground(new Color(11029930)); add(eti_real); //Definimos la etiqueta que identifica la entrada para la parte imaginaria. eti_imag = new java.awt.Label("Parte imaginaria:"); eti_imag.reshape(220,50,130,20); eti_imag.setFont(new Font("Dialog", Font.BOLD, 14)); eti_imag.setForeground(new Color(0)); eti_imag.setBackground(new Color(11029930)); add(eti_imag); } public boolean handleEvent(Event event) { //Función que redirige los eventos del Applet. if (event.target==this && event.id==Event.MOUSE_DOWN) { //Se produce una pulsación de un botón del ratón. dao_MouseDown(event); return true; } if (event.target==bot_autor && event.id==Event.ACTION_EVENT) { //Se produce una pulsación en el botón Autor. botAutor_Clicked(event); return true; } if (event.target==bot_mandel && event.id==Event.ACTION_EVENT) { //Se produce una pulsación en el botón Mandelbrot. botMandel_Clicked(event); return true; } if (event.target==bot_julia && event.id==Event.ACTION_EVENT) { //Se produce una pulsación en el botón Julia. botJulia_Clicked(event); return true; } if (event.target==bot_dibujar && event.id==Event.ACTION_EVENT) { //Se produce una pulsación en el botón Dibujar. botDibujar_Clicked(event); return true; } if (event.target == bot_pikover && event.id == Event.ACTION_EVENT) { //Se produce una pulsación en el botón Pickover. botPikover_Clicked(event); return true; } //Manejamos el resto de los eventos. return super.handleEvent(event); } //Declaramos los controles. java.awt.Label titulo; java.awt.Label mensaje; java.awt.Button bot_autor; java.awt.Button bot_mandel; java.awt.Button bot_julia; java.awt.Button bot_pikover; java.awt.Button bot_dibujar; java.awt.TextField text_real; java.awt.TextField text_imag; java.awt.Label eti_real; java.awt.Label eti_imag; public void paint(Graphics ARFS){ //Función que pinta el Applet en pantalla. //ARFS es el objeto Graphics con el que voy a dibujar los conjuntos. //Defino un vector con los colores. int NUM_COLORES = 17; Color[] pinta = new Color[NUM_COLORES]; //Puedo definir cada color así. pinta[0] = Color.gray; pinta[1] = new Color(209,225,17); pinta[2] = Color.blue; pinta[3] = Color.cyan; pinta[4] = Color.darkGray; pinta[5] = Color.pink; pinta[6] = new Color(155,90,47); pinta[7] = Color.green; pinta[8] = Color.lightGray; pinta[9] = Color.magenta; pinta[10] = new Color(58,184,62); pinta[11] = Color.yellow; pinta[12] = Color.orange; pinta[13] = Color.red; pinta[14] = new Color(186,35,207); pinta[15] = new Color(134,253,70); pinta[16] = Color.black; //Dibujo los rectángulos para contener los botones. ARFS.setColor(new Color(11029930)); ARFS.fillRect(0,45,550,55); ARFS.fillRect((int)LONG_X,BORDE,150,(int)LONG_Y); if(OPCION==2 || OPCION==3 || OPCION==4){ //Tengo que dibujar alguno de los conjuntos. //Desactivo el botón Dibujar, y las entradas de datos. bot_dibujar.disable(); text_real.disable(); text_imag.disable(); //Dibujo un rectángulo negro que sirva de fondo al conjunto. ARFS.setColor(pinta[(NUM_COLORES-1)]); ARFS.fillRect(0,BORDE,(int)LONG_X,(int)LONG_Y); } if(OPCION==1){ //Muestro la información sobre el autor. int sup = 130; //Margen superior. int margen = 25; //Margen izquierdo. mensaje.setText("Información del autor y del programa"); //Desactivo los componentes que no necesito. bot_dibujar.disable(); text_real.setText("XXXXXXXXXX"); text_imag.setText("XXXXXXXXXX"); text_real.disable(); text_imag.disable(); ARFS.setColor(Color.black); ARFS.drawRect(5,BORDE+5,(int)LONG_X-10,(int)LONG_Y-10); ARFS.drawRect(6,BORDE+6,(int)LONG_X-12,(int)LONG_Y-12); ARFS.drawString("<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>",margen,sup); ARFS.drawString("Programado por Pablo López Cienfuegos.",margen,sup+20); ARFS.drawString("http://www.fortunecity.com/skyscraper/corel/284/",margen,sup+40); ARFS.drawString("e-mail: pablete.en.la.red@eudoramail.com",margen,sup+60); ARFS.drawString("",margen,sup+80); ARFS.drawString("1º-. Pulse el botón del fractal a dibujar.",margen+20,sup+100); ARFS.drawString("2º-. Elija los valores de la semilla del",margen+20,sup+120); ARFS.drawString("método iterativo, y pulse DIBUJAR.",margen+50,sup+140); ARFS.drawString("3º-. Haga doble clic con el botón principal",margen+20,sup+160); ARFS.drawString("para incrementar el zoom.",margen+50,sup+180); ARFS.drawString("4º-. Haga doble clic con el botón secundario",margen+20,sup+200); ARFS.drawString("para disminuir el zoom.",margen+50,sup+220); ARFS.drawString("",margen,sup+240); ARFS.drawString("<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>",margen,sup+260); } else if(OPCION==2){ //Conjunto de Mandelbrot. //Informo de que empiezo a dibujar. mensaje.setText("Dibujando el conjunto de Mandelbrot..."); //Semilla del conjunto de Mandelbrot. Double real_aux = new Double(text_real.getText()); double real = real_aux.doubleValue(); Double imag_aux = new Double(text_imag.getText()); double imag = imag_aux.doubleValue(); //Comienzo el bucle en el que dibujo el conjunto de Mandelbrot. for(int ver=0;ver<LONG_Y;ver++){ //La coordenada Y oscila entre 0 y 300. //Bi es la parte imaginaria del número complejo. double bi = ver/LONG_Y*(y2-y1)+y1; for(int hor=0;hor<LONG_X;hor++){ //La coordenada X oscila entre 0 y 400. //A es la parte real del número complejo. double a = hor/LONG_X*(x2-x1)+x1; //Componentes del número complejo Z. double c1 = real,c2 = imag; //Variables auxiliares. int contador = 0; double norma_z = .0; double c_aux; while(norma_z<COTA && ++contador<NMAX){ //Bucle en el que itero Z*Z+C. c_aux = c1; c1 = c1*c1-c2*c2+a; c2 = 2.*c_aux*c2+bi; //Norma del número complejo. norma_z = c1*c1+c2*c2; } if(norma_z>=COTA){ //Salgo del bucle por superar la cota. //Sólo quiero usar los NUM_COLORES-1 primeros colores de pinta. ARFS.setColor(pinta[contador%(NUM_COLORES-1)]); ARFS.drawLine(hor,ver+BORDE,hor,ver+BORDE); } } } //Fin del dibujado del conjunto. mensaje.setText("Conjunto de Mandelbrot finalizado."); } else if(OPCION==3){ //Conjunto de Julia. //Informo de que empiezo a dibujar. mensaje.setText("Dibujando el conjunto de Julia..."); //Declaro las variables auxiliares. int contador; //Semilla del conjunto de Julia. Double real_aux = new Double(text_real.getText()); double real = real_aux.doubleValue(); Double imag_aux = new Double(text_imag.getText()); double imag = imag_aux.doubleValue(); //Comienzo el bucle en el que dibujo el conjunto de Julia. for(int ver=0;ver<LONG_Y;ver++){ //La coordenada Y oscila entre 0 y 300. for(int hor=0;hor<LONG_X;hor++){ //La coordenada X oscila entre 0 y 400. //Variables auxiliares. double c1 = hor/LONG_X*(x2-x1)+x1; double c2 = ver/LONG_Y*(y2-y1)+y1; double c_aux; double norma_z = .0; contador = 0; while(norma_z<COTA && ++contador<NMAX){ //Bucle en el que itero Z*Z+C. c_aux = c1; c1 = c1*c1-c2*c2+real; c2 = 2.*c_aux*c2+imag; //Norma del número complejo. norma_z = c1*c1+c2*c2; } if(norma_z>=COTA){ //Salgo del bucle por superar la cota. //Sólo quiero usar los NUM_COLORES-1 primeros colores de pinta. ARFS.setColor(pinta[contador%(NUM_COLORES-1)]); ARFS.drawLine(hor,ver+BORDE,hor,ver+BORDE); } } } //Fin del dibujado del conjunto. mensaje.setText("Conjunto de Julia finalizado."); } else if(OPCION==4){ //Conjunto de Pickover. //Informo de que empiezo a dibujar. mensaje.setText("Dibujando el conjunto de Pickover..."); //Declaro las variables auxiliares. int contador; //Semilla del conjunto de Pickover. Double real_aux = new Double(text_real.getText()); double real = real_aux.doubleValue(); Double imag_aux = new Double(text_imag.getText()); double imag = imag_aux.doubleValue(); //Comienzo el bucle en el que dibujo el conjunto de Pickover. for(int ver=0;ver<LONG_Y;ver++){ //La coordenada Y oscila entre 0 y 300. for(int hor=0;hor<LONG_X;hor++){ //La coordenada X oscila entre 0 y 400. //Variables auxiliares. double c1 = hor/LONG_X*(x2-x1)+x1; double c2 = ver/LONG_Y*(y2-y1)+y1; double c_aux; double norma_z = .0; contador = 0; while(norma_z<COTA && ++contador<NMAX){ //Bucle en el que itero Z*Z*Z+C. c_aux = c1; c1 = c_aux*(c_aux*c_aux-c2*c2)-2.*c_aux*c2*c2+real; c2 = 2.*c_aux*c_aux*c2+c2*(c_aux*c_aux-c2*c2)+imag; //Norma del número complejo. norma_z = c1*c1+c2*c2; } if(norma_z>=COTA){ //Salgo del bucle por superar la cota. //Sólo quiero usar los NUM_COLORES-1 primeros colores de pinta. ARFS.setColor(pinta[contador%(NUM_COLORES-1)]); ARFS.drawLine(hor,ver+BORDE,hor,ver+BORDE); } } } //Fin del dibujado del conjunto. mensaje.setText("Conjunto de Pickover finalizado."); } else if(OPCION==5){ //Opciones para la semilla de Julia. int sup = 130; //Margen superior. int margen = 25; //Margen izquierdo. mensaje.setText("Opciones del conjunto de Julia."); ARFS.setColor(Color.black); //Activo los elementos que necesito para dibujar el conjunto. bot_dibujar.enable(); text_real.enable(); text_imag.enable(); text_real.setText("-0.9"); text_imag.setText("0.0"); ARFS.drawRect(5,BORDE+5,(int)LONG_X-10,(int)LONG_Y-10); ARFS.drawRect(6,BORDE+6,(int)LONG_X-12,(int)LONG_Y-12); ARFS.drawString("<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>",margen,sup); ARFS.drawString("",margen,sup+20); ARFS.drawString("Para representar el gráfico del conjunto de Julia,",margen,sup+40); ARFS.drawString("introduzca en 'Parte real' y en 'Parte imaginaria',",margen,sup+60); ARFS.drawString("los valores que desee para la semilla del método",margen,sup+80); ARFS.drawString("iterativo, (el valor de C en Z=Z^2+C), y pulse en",margen,sup+100); ARFS.drawString("el botón Dibujar.",margen,sup+120); ARFS.drawString("",margen,sup+140); ARFS.drawString("",margen,sup+160); ARFS.drawString("",margen,sup+180); ARFS.drawString("",margen,sup+200); ARFS.drawString("",margen,sup+220); ARFS.drawString("Programado por Pablo López Cienfuegos.",margen+30,sup+240); ARFS.drawString("<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>",margen,sup+260); } else if(OPCION==6){ //Opciones para la semilla de Pickover. int sup = 130; //Margen superior. int margen = 25; //Margen izquierdo. mensaje.setText("Opciones del conjunto de Pickover."); ARFS.setColor(Color.black); //Activo los elementos que necesito para dibujar el conjunto. bot_dibujar.enable(); text_real.enable(); text_imag.enable(); text_real.setText("-0.7"); text_imag.setText("0.2"); ARFS.drawRect(5,BORDE+5,(int)LONG_X-10,(int)LONG_Y-10); ARFS.drawRect(6,BORDE+6,(int)LONG_X-12,(int)LONG_Y-12); ARFS.drawString("<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>",margen,sup); ARFS.drawString("",margen,sup+20); ARFS.drawString("Para representar el gráfico del conjunto de Pickover,",margen,sup+40); ARFS.drawString("introduzca en 'Parte real' y en 'Parte imaginaria',",margen,sup+60); ARFS.drawString("los valores que desee para la semilla del método",margen,sup+80); ARFS.drawString("iterativo, (el valor de C en Z=Z^3+C), y pulse en",margen,sup+100); ARFS.drawString("el botón Dibujar.",margen,sup+120); ARFS.drawString("",margen,sup+140); ARFS.drawString("",margen,sup+160); ARFS.drawString("",margen,sup+180); ARFS.drawString("",margen,sup+200); ARFS.drawString("",margen,sup+220); ARFS.drawString("Programado por Pablo López Cienfuegos.",margen+30,sup+240); ARFS.drawString("<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>",margen,sup+260); } else if(OPCION==7){ //Opciones para la semilla de Mandelbrot. int sup = 130; //Margen superior. int margen = 25; //Margen izquierdo. mensaje.setText("Opciones del conjunto de Mandelbrot."); ARFS.setColor(Color.black); //Activo los elementos que necesito para dibujar el conjunto. bot_dibujar.enable(); text_real.enable(); text_imag.enable(); text_real.setText("0.0"); text_imag.setText("0.0"); ARFS.drawRect(5,BORDE+5,(int)LONG_X-10,(int)LONG_Y-10); ARFS.drawRect(6,BORDE+6,(int)LONG_X-12,(int)LONG_Y-12); ARFS.drawString("<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>",margen,sup); ARFS.drawString("",margen,sup+20); ARFS.drawString("Para representar el gráfico del conjunto de",margen,sup+40); ARFS.drawString("Mandelbrot, introduzca en 'Parte real' y en 'Parte",margen,sup+60); ARFS.drawString("imaginaria', los valores que desee para la semilla del",margen,sup+80); ARFS.drawString("método iterativo, (el valor inicial de Z en Z=Z^2+C), y",margen,sup+100); ARFS.drawString("pulse en el botón Dibujar.",margen,sup+120); ARFS.drawString("",margen,sup+140); ARFS.drawString("",margen,sup+160); ARFS.drawString("",margen,sup+180); ARFS.drawString("",margen,sup+200); ARFS.drawString("",margen,sup+220); ARFS.drawString("Programado por Pablo López Cienfuegos.",margen+30,sup+240); ARFS.drawString("<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>",margen,sup+260); } } //Fin del Applet dao. }


Visitar PABLETE en la Red...
Visitar [xtrasgu.org]...
Índice
Anterior
Siguiente

Página diseñada por Pablo López Cienfuegos
e-mail : [email protected]
Última modificación:  30 DIC 98