import java.awt.*; import java.applet.*; import java.awt.event.*; import java.awt.Graphics; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.lang.Math.*; import java.awt.event.MouseMotionListener; import java.awt.event.MouseListener; import java.awt.event.MouseEvent; import java.net.URL; import java.net.MalformedURLException; public class proyecto4 extends Applet { double cr,ci; double crAnterior,ciAnterior; Color[] paleta; Color[] paleta1; Color[] paleta2; Color[] paleta3; int numeroPaletaMandelbrot=1; int numeroPaletaAnteriorMandelbrot=1; int numeroPaletaJulia=1; int numeroPaletaAnteriorJulia=1; int iteracionesMandelbrot=100; int iteracionesJulia=100; boolean eleccion=false; boolean dibujarMandelbrot=false; boolean dibujarJulia=false; boolean continuarMandelbrot=true; boolean continuarJulia=true; double xVirtualMandel=0; double yVirtualMandel=0; double xVirtualJulia=0; double yVirtualJulia=0; int precisionMandelbrot=2; int precisionAnteriorMandelbrot=2; int precisionJulia=2; int precisionAnteriorJulia=2; int x1,y1,x2,y2; Image imagenMandelbrot; Graphics graficoMandelbrot; Image imagenJulia; Graphics graficoJulia; Thread dibujaMandelbrot=null; Thread dibujaJulia=null; mandelbrotCanvas mandelbrot; juliaCanvas julia; Panel granPanel; Panel panelMandelbrot; Label tituloMandelbrot; Panel botonesMandelbrot; Button reiniciarMandelbrot; Button redibujarMandelbrot; Button interrumpirMandelbrot; Panel panelRealMandelbrot; Label realMandelbrot; TextField entradaRealMandelbrot; Panel panelImaginariaMandelbrot; Label imaginariaMandelbrot; TextField entradaImaginariaMandelbrot; Panel panelJulia; Label tituloJulia; Panel botonesJulia; Button reiniciarJulia; Button redibujarJulia; Button interrumpirJulia; Panel panelRealJulia; Label realJulia; TextField entradaRealJulia; Panel panelImaginariaJulia; Label imaginariaJulia; TextField entradaImaginariaJulia; Panel menu; Label constante; Choice selector; Label veces; TextField entradaIteraciones; Label colores; Choice combinacion; Label resolucion; Choice res; Button ayuda; AppletContext appletContext; URL url; String urlString; boolean urlValida=true; public void init() { setBackground(Color.black); setLayout(new BorderLayout(10,10)); mandelbrot = new mandelbrotCanvas(); julia = new juliaCanvas(); menu = new Panel(); menu.setLayout(new GridLayout(13,1)); constante = new Label(" Constante"); constante.setForeground(Color.white); selector = new Choice(); selector.add("Personalizado"); selector.add("Circulo"); selector.add("Coliflor"); selector.add("Coliflor disconexa"); selector.add("Dendrita"); selector.add("Aeroplano"); selector.add("Conejo"); selector.add("Julia 1"); selector.add("Julia 2"); selector.add("Julia 3"); selector.add("Julia 4"); selector.add("Julia 5"); selector.add("Julia 6"); selector.add("Julia 7"); selector.addItemListener(new selectorListener()); selector.setBackground(Color.white); veces = new Label(" Iteraciones"); veces.setForeground(Color.white); entradaIteraciones = new TextField(3); entradaIteraciones.setBackground(Color.white); entradaIteraciones.setText("100"); colores = new Label(" Paleta"); colores.setForeground(Color.white); combinacion = new Choice(); combinacion.add("Paleta 1"); combinacion.add("Paleta 2"); combinacion.add("Paleta 3"); combinacion.addItemListener(new combinacionListener()); combinacion.setBackground(Color.white); ayuda = new Button("Ayuda"); ayuda.addActionListener(new ayudaListener()); ayuda.setBackground(Color.lightGray); resolucion = new Label(" Resolucion"); resolucion.setForeground(Color.white); res = new Choice(); res.add("Baja"); res.add("Media"); res.add("Maxima"); res.addItemListener(new resolucionListener()); res.setBackground(Color.white); menu.add(constante); menu.add(selector); menu.add(new Label("")); menu.add(veces); menu.add(entradaIteraciones); menu.add(new Label("")); menu.add(colores); menu.add(combinacion); menu.add(new Label("")); menu.add(resolucion); menu.add(res); menu.add(new Label("")); menu.add(ayuda); // ---- Gran Panel ---- granPanel = new Panel(); granPanel.setLayout(new GridLayout(1,3,20,0)); // ---- Panel Mandelbrot ---- panelMandelbrot = new Panel(); panelMandelbrot.setBounds(0,0,mandelbrot.getSize().width,150); panelMandelbrot.setLayout(new GridLayout(4,1)); tituloMandelbrot = new Label("Mandelbrot"); tituloMandelbrot.setForeground(Color.white); botonesMandelbrot = new Panel(); botonesMandelbrot.setLayout(new GridLayout(1,3,5,0)); reiniciarMandelbrot = new Button("Restaurar"); reiniciarMandelbrot.addActionListener(new reiniciarListener()); reiniciarMandelbrot.setBackground(Color.lightGray); redibujarMandelbrot = new Button("Redibujar"); redibujarMandelbrot.addActionListener(new redibujarListener()); redibujarMandelbrot.setBackground(Color.lightGray); interrumpirMandelbrot = new Button("Interrumpir"); interrumpirMandelbrot.addActionListener(new interrumpirListener()); interrumpirMandelbrot.setBackground(Color.lightGray); botonesMandelbrot.add(reiniciarMandelbrot); botonesMandelbrot.add(redibujarMandelbrot); botonesMandelbrot.add(interrumpirMandelbrot); panelRealMandelbrot = new Panel(); panelRealMandelbrot.setLayout(new GridLayout(1,2,5,0)); realMandelbrot = new Label("Parte real"); realMandelbrot.setForeground(Color.white); entradaRealMandelbrot = new TextField(3); entradaRealMandelbrot.setBackground(Color.white); entradaRealMandelbrot.setText("0.32"); panelRealMandelbrot.add(realMandelbrot); panelRealMandelbrot.add(entradaRealMandelbrot); panelImaginariaMandelbrot = new Panel(); panelImaginariaMandelbrot.setLayout(new GridLayout(1,2,5,0)); imaginariaMandelbrot = new Label("Parte imaginaria"); imaginariaMandelbrot.setForeground(Color.white); entradaImaginariaMandelbrot = new TextField(3); entradaImaginariaMandelbrot.setBackground(Color.white); entradaImaginariaMandelbrot.setText("0.043"); panelImaginariaMandelbrot.add(imaginariaMandelbrot); panelImaginariaMandelbrot.add(entradaImaginariaMandelbrot); panelMandelbrot.add(tituloMandelbrot); panelMandelbrot.add(botonesMandelbrot); panelMandelbrot.add(panelRealMandelbrot); panelMandelbrot.add(panelImaginariaMandelbrot); // ---- Panel Julia ---- panelJulia = new Panel(); panelJulia.setBounds(0,0,julia.getSize().width,150); panelJulia.setLayout(new GridLayout(4,1)); tituloJulia = new Label("Julia"); tituloJulia.setForeground(Color.white); botonesJulia = new Panel(); botonesJulia.setLayout(new GridLayout(1,3,5,0)); reiniciarJulia = new Button("Restaurar"); reiniciarJulia.addActionListener(new reiniciarListener()); reiniciarJulia.setBackground(Color.lightGray); redibujarJulia = new Button("Redibujar"); redibujarJulia.addActionListener(new redibujarListener()); redibujarJulia.setBackground(Color.lightGray); interrumpirJulia = new Button("Interrumpir"); interrumpirJulia.addActionListener(new interrumpirListener()); interrumpirJulia.setBackground(Color.lightGray); botonesJulia.add(reiniciarJulia); botonesJulia.add(redibujarJulia); botonesJulia.add(interrumpirJulia); panelRealJulia = new Panel(); panelRealJulia.setLayout(new GridLayout(1,2,5,0)); realJulia = new Label("Parte real"); realJulia.setForeground(Color.white); entradaRealJulia = new TextField(3); entradaRealJulia.setBackground(Color.white); entradaRealJulia.setEditable(false); panelRealJulia.add(realJulia); panelRealJulia.add(entradaRealJulia); panelImaginariaJulia = new Panel(); panelImaginariaJulia.setLayout(new GridLayout(1,2,5,0)); imaginariaJulia = new Label("Parte imaginaria"); imaginariaJulia.setForeground(Color.white); entradaImaginariaJulia = new TextField(3); entradaImaginariaJulia.setBackground(Color.white); entradaImaginariaJulia.setEditable(false); panelImaginariaJulia.add(imaginariaJulia); panelImaginariaJulia.add(entradaImaginariaJulia); panelJulia.add(tituloJulia); panelJulia.add(botonesJulia); panelJulia.add(panelRealJulia); panelJulia.add(panelImaginariaJulia); granPanel.add(panelMandelbrot); granPanel.add(panelJulia); // ---- Termina Gran Panel ---- add("South",granPanel); add("West", mandelbrot); add("Center",menu); add("East",julia); // ---- Finalizan componentes ---- // ---- Colores ---- inicializarPaletas(iteracionesMandelbrot,0); // ---- Inician graficos ---- imagenMandelbrot = createImage(mandelbrot.getSize().width,mandelbrot.getSize().height); graficoMandelbrot = imagenMandelbrot.getGraphics(); imagenJulia = createImage(julia.getSize().width,julia.getSize().height); graficoJulia = imagenJulia.getGraphics(); // ---- Ayuda ---- appletContext = getAppletContext(); urlString = "http://www.cimat.mx/~jachavezd/applets/proyecto/ayuda.html"; try { url = new URL(urlString); } catch (MalformedURLException e) {urlValida=false;} // ---- Procesos ---- dibujaMandelbrot = new Thread(mandelbrot); dibujaMandelbrot.start(); dibujaJulia = new Thread(julia); dibujaJulia.start(); } public void inicializarPaletas(int iteraciones, int quien) { /* Mandelbrot = 0, Julia = 1*/ paleta = new Color[iteraciones]; paleta1 = new Color[iteraciones]; paleta2 = new Color[iteraciones]; paleta3 = new Color[iteraciones]; double A; paleta1[0] = new Color(0,0,0); for (int v=1; v 25 ) escala = (int)(escala / 2.5); continuarMandelbrot=false; dibujaMandelbrot = new Thread(mandelbrot); dibujaMandelbrot.start(); } else if (!dibujaJulia.isAlive()) { clickPoint = event.getPoint(); int[] coordenadas = new int[2]; double[] ncoordenadas = new double[2]; coordenadas[0]=clickPoint.x; coordenadas[1]=clickPoint.y; ncoordenadas = cambiaCoordenadas(coordenadas); cr = ncoordenadas[0]; ci = ncoordenadas[1]; eleccion = true; selector.select("Personalizado"); entradaRealMandelbrot.setText(""+cr); entradaImaginariaMandelbrot.setText(""+ci); } } public void mouseReleased(MouseEvent event) { clickPoint = event.getPoint(); x2=clickPoint.x; y2=clickPoint.y; if ( Math.abs(x2-x1) > 2 && Math.abs(y2-y1) > 2 ) { int[] arreglo = new int[2]; double[] arr = new double[2]; arreglo[0] = (int)( x1 + 4*(x2 - x1)/5 ); arreglo[1] = (int)( (y1 + y2)/2 ); arr = cambiaCoordenadas(arreglo); xVirtualMandel = arr[0]; yVirtualMandel = arr[1]; if ( 5 * Math.abs(y2-y1) <= 4*Math.abs(x2-x1) ) escala = escala*getSize().width/Math.abs(x2-x1); else escala = escala*getSize().height/Math.abs(y2-y1); continuarMandelbrot=false; dibujaMandelbrot = new Thread(mandelbrot); dibujaMandelbrot.start(); } } public void mouseEntered(MouseEvent event) {} public void mouseExited(MouseEvent event) {} public double[] cambiaCoordenadas(int[] punto) { double[] nuevoPunto = new double[2]; nuevoPunto[0] = xVirtualMandel + (punto[0] - xCentro)/escala; nuevoPunto[1] = yVirtualMandel + (yCentro - punto[1])/escala; return(nuevoPunto); } public double modulo(double x,double y) { double r; r = Math.sqrt(x*x + y*y); return(r); } public int velocidad(double cr, double ci, int veces) { boolean escape=false; double x=0,y=0,xt=0; int k=0; while(!escape && k4) escape=true; } return(k); } } // o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o- // ------------------- Clase Julia Canvas ------------------- class juliaCanvas extends Canvas implements MouseListener,MouseMotionListener,Runnable{ private java.awt.Point clickPoint = null; private int ancho=400, alto=400; String mensaje; int xCentro=200,yCentro=200,n; int x1=1,y1=1,x2=1,y2=1; double escala=100; public juliaCanvas() { setBounds(0,0,ancho,alto); addMouseListener(this); } public void run() { if (Thread.currentThread() == dibujaJulia) { dibujarJulia=false; continuarJulia=true; redibujarJulia.setEnabled(false); interrumpirJulia.setEnabled(true); try { menu.remove(selector); menu.remove(res); menu.remove(combinacion); menu.remove(entradaIteraciones); } catch (Exception ex) {} try { iteracionesJulia = (new Integer(entradaIteraciones.getText())).intValue(); } catch (NumberFormatException ex) { entradaIteraciones.setText("100"); iteracionesJulia = 100; } inicializarPaletas(iteracionesJulia,1); if (!eleccion) { cr = 0.32; ci = 0.043; } int c=0; int[] coord = new int[2]; double[] temporal = new double[2]; graficoJulia.setColor(Color.black); graficoJulia.fillRect(0,0,getSize().width-1,getSize().height-1); showStatus("Dibujando. Espere, por favor."); int a=0,b=0; while(a 25 ) escala = (int)(escala / 2.5); continuarJulia=false; dibujaJulia = new Thread(julia); dibujaJulia.start(); } else { clickPoint = event.getPoint(); int[] coordenadas = new int[2]; double[] ncoordenadas = new double[2]; coordenadas[0]=clickPoint.x; coordenadas[1]=clickPoint.y; ncoordenadas = cambiaCoordenadas(coordenadas); entradaRealJulia.setText(""+ncoordenadas[0]); entradaImaginariaJulia.setText(""+ncoordenadas[1]); } } public void mouseReleased(MouseEvent event) { clickPoint = event.getPoint(); x2=clickPoint.x; y2=clickPoint.y; if ( Math.abs(x2-x1) > 2 && Math.abs(y2-y1) > 2 ) { int[] arreglo = new int[2]; double[] arr = new double[2]; arreglo[0] = (int)( (x1 + x2)/2 ); arreglo[1] = (int)( (y1 + y2)/2 ); arr = cambiaCoordenadas(arreglo); xVirtualJulia = arr[0]; yVirtualJulia = arr[1]; if ( Math.abs(y2-y1) <= Math.abs(x2-x1) ) escala = escala*getSize().width/Math.abs(x2-x1); else escala = escala*getSize().height/Math.abs(y2-y1); continuarJulia=false; dibujaJulia = new Thread(julia); dibujaJulia.start(); } } public void mouseEntered(MouseEvent event) {} public void mouseExited(MouseEvent event) {} // ---------------------- Termina zoom --------------------------------- public double[] cambiaCoordenadas(int[] punto) { double[] nuevoPunto = new double[2]; nuevoPunto[0] = xVirtualJulia + (punto[0] - xCentro)/escala; nuevoPunto[1] = yVirtualJulia + (yCentro - punto[1])/escala; return(nuevoPunto); } public double modulo(double x,double y) { double r; r = Math.sqrt(x*x + y*y); return(r); } public int velocidad(double a, double b, int veces) { boolean escape=false; double at=0; int k=0; while(!escape && k4) escape=true; } return(k); } } }