Vous êtes sur la page 1sur 7

package ejemplosfisica229b; import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.util.

Random; public class PRUEBA extends JFrame implements ActionListener { int x[][], y[][], numd, n, MaxX, MaxY, posx[], posy[]; private int numser, inser; private double maxy, miny, etiqx[], etiqy[]; private double maxx, minx; private int pos_ejex, pos_ejey; Container contenedor = getContentPane(); private JButton Si, No, Seno, // Grafica la funcin seno. Coseno, // Grafica la funcin coseno. Tangente, // Grafica la funcin tangente. Secante, // Grafica la funcin secante. Cotangente, // Grafica la funcin cotangente. Cosecante; // Grafica la funcin cosecante. public PRUEBA() { contenedor.setBackground(Color.WHITE); contenedor.setLayout(null); // Parmetros indispensables para la construccin de la grfica. MaxX = 450; MaxY = 450; numd = 5; setBounds(150, 0, 900, 500); pos_ejex = 50; pos_ejey = 450; numser = 5; etiqx = new double[numd]; etiqy = new double[numd]; posx = new int[numd]; posy = new int[numd]; inser = 0; // Crea y coloca los seis botones de opcin. Seno = new JButton("Grfica de la funcin seno."); Coseno = new JButton("Grfica de la funcin coseno."); Tangente = new JButton("Grfica de la funcin tangente."); Secante = new JButton("Grfica de la funcin secante."); Cotangente = new JButton("Grfica de la funcin cotangente."); Cosecante = new JButton("Grfica de la funcin cosecante."); Si = new JButton("Si"); No = new JButton("No"); // Permite desencadenar un evento al accionar clic. Seno.addActionListener(this); Coseno.addActionListener(this); Tangente.addActionListener(this); Secante.addActionListener(this); Cotangente.addActionListener(this); Cosecante.addActionListener(this); // Coloca los botones en las coordenadas indicadas. add(Seno); add(Coseno); add(Tangente); add(Secante); add(Cotangente);

add(Cosecante); Seno.setBounds(550, 50, 250, 30); Coseno.setBounds(new Rectangle(550, 100, 250, 30)); Tangente.setBounds(new Rectangle(550, 150, 250, 30)); Secante.setBounds(new Rectangle(550, 200, 250, 30)); Cotangente.setBounds(new Rectangle(550, 250, 250, 30)); Cosecante.setBounds(new Rectangle(550, 300, 250, 30)); } // cierre del constructor PRUEBA(). public void paint(Graphics g) { super.paint(g); setTitle("********* GRAFICAS DE FUNCIONES TRIGONOMTRICAS *********"); } // cierre del mtodo paint void Datos(double xx[], double yy[]) { SerieX(xx); SerieY(yy); } // cierre del mtodo Datos(). void SerieX(double x0[]) { int i; double min, max, inc, aux; n = x0.length; if (inser == 0) { x = new int[numser][n]; max = min = x0[0]; for(i = 1; i < n; i++) { if (x0[i] > max) max = x0[i]; if (x0[i] < min) min = x0[i]; } minx = min; maxx = max; inc = (max - min)/numd; if (Math.abs(max - min) > 1.0) { if (Math.abs(inc) < 1.0) inc = (double)1.0; else inc = Math.round(inc + 0.5); } for(i = 0; i < numd; i++) { aux = min + inc * i; aux = (Math.round(aux * 10000.0))/10000.0; etiqx[i] = aux; posx[i] = (int)((etiqx[i] - min)/(max - min) * (MaxX - 50)); } if(min < 0 && max > 0) pos_ejex += (int)(-min/(max - min) * (MaxX - 50)); } else { min = minx; max = maxx; } for (i = 0; i < n; i++) x[inser][i] = (int)((x0[i] - min)/(maxx - minx) * (MaxX - 50)); } // cierre del mtodo SerieX. void SerieY(double y0[]) { int i; double min, max, inc, aux; if(inser >= numser) return; if(inser == 0) { y = new int[numser][n]; max = min = y0[0]; for(i = 1; i < n; i++) { if(y0[i] > max) max = y0[i]; if(y0[i] < min) min = y0[i];

} maxy = max; miny = min; inc = (max - min)/numd; if(Math.abs(max - min) > 1.0) { if(Math.abs(inc) < 1.0) inc = (double)1.0; else inc = Math.round(inc+0.5); } for(i = 0; i < numd; i++) { aux = min + inc * i; aux = (Math.round(aux*10000.0))/10000.0; etiqy[i] = aux; posy[i] = (int)((etiqy[i] - min)/(max - min) * (MaxY - 50)); } if(min < 0 && max > 0) pos_ejey = MaxY -(int)(-min/(max - min) * (MaxY - 50)); } // cierre de la instruccin if externa. else { max = maxy; min = miny; } for(i = 0; i < n; i++) y[inser][i] = (int)((y0[i] - min)/(max - min) * (MaxY - 50)); inser++; } // cierre del mtodo SerieY(). public void actionPerformed(ActionEvent evento) { if(evento.getSource() == Seno) { evento.getActionCommand(); SENO(this.getGraphics()); continuacion(this.getGraphics()); } else if(evento.getSource() == Coseno) { evento.getActionCommand(); COSENO(this.getGraphics()); continuacion(this.getGraphics()); } else if(evento.getSource() == Tangente) { evento.getActionCommand(); TANGENTE(this.getGraphics()); continuacion(this.getGraphics()); } else if(evento.getSource() == Secante) { evento.getActionCommand(); SECANTE(this.getGraphics()); continuacion(this.getGraphics()); } else if(evento.getSource() == Cosecante) { evento.getActionCommand(); COSECANTE(this.getGraphics()); continuacion(this.getGraphics()); } else if(evento.getSource() == Cotangente) { evento.getActionCommand(); COTANGENTE(this.getGraphics()); continuacion(this.getGraphics()); } else if(evento.getSource() == Si) { evento.getActionCommand(); // paint(this.getGraphics()); // hace el llamado nuevamente a paint. this.repaint(); // permite repintar nuevamente la figura. } else if(evento.getSource() == No) { evento.getActionCommand(); salida(); System.exit(0); }

} // cierre del mtodo actionPerformed(). public static void main(String args[]) { /* JOptionPane.showMessageDialog(null, "El programa muestra el " + "grfico de las principales funciones trigonomtricas \n", "Objetivo", JOptionPane.INFORMATION_MESSAGE); */ PRUEBA aplicacion = new PRUEBA(); aplicacion.setBackground(Color.WHITE); aplicacion.setDefaultCloseOperation(JFrame.EXIT_ON _CLOSE); aplicacion.setLocation(150, 150); aplicacion.setVisible(true); } // cierre del mtodo main(). void SENO(Graphics g) { int mm, N; double inicio = 0, fin = 5, incremento = 0.01; N = (int)((fin - inicio)/incremento) + 1; // determina el nmero de puntos. double xx[] = new double[N]; double yy[] = new double[N]; for(int i = 0; i < N; i++) { // crea las parejas de puntos. xx[i] = inicio + incremento * i; yy[i] = Math.sin(3.0 * xx[i]) ; } Datos(xx,yy); // genera las parejas de puntos y la curva a ser trazada. EjesCoordenados(g); if(inser > numser) mm = numser; else mm = inser; for(int j = 0; j <= mm; j++) { // pausa(); COLOR(g); for(int i = 0; i < n - 1; i++) g.drawLine(50 + x[j][i], MaxY - y[j][i], 50 + x[j][i+1], MaxY - y[j][i+1]); } } // cierre del mtodo SENO(). void COSENO(Graphics g) { int mm, N; double inicio = 0, fin = 5, incremento = 0.01; N = (int)((fin - inicio)/incremento) + 1; // determina el nmero de puntos. double xx[] = new double[N]; double yy[] = new double[N]; for(int i = 0; i < N; i++) { // crea las parejas de puntos. xx[i] = inicio + incremento * i; yy[i] = Math.cos(3.0 * xx[i]) ; } // g.clearRect(0, 0, 460, 500); Datos(xx,yy); // genera las parejas de puntos y la curva a ser trazada. EjesCoordenados(g); if(inser > numser) mm = numser; else mm = inser; for(int j = 0; j <= mm; j++) { COLOR(g); for(int i = 0; i < n - 1; i++) g.drawLine(50 + x[j][i], MaxY - y[j][i], 50 + x[j][i+1], MaxY - y[j][i+1]); } } // cierre del mtodo COSENO(). void TANGENTE(Graphics g) { int mm, N; double inicio = 0, fin = 5, incremento = 0.01;

N = (int)((fin - inicio)/incremento) + 1; // determina el nmero de puntos. double xx[] = new double[N]; double yy[] = new double[N]; for(int i = 0; i < N; i++) { // crea las parejas de puntos. xx[i] = inicio + incremento * i; yy[i] = Math.tan(xx[i]); } Datos(xx,yy); // genera las parejas de puntos y la curva a ser trazada. EjesCoordenados(g); if(inser > numser) mm = numser; else mm = inser; for(int j = 0; j <= mm; j++) { // realiza el trazado de la curva. COLOR(g); for(int i = 0; i < n - 1; i++) g.drawLine(50 + x[j][i], MaxY - y[j][i], 50 + x[j][i+1], MaxY - y[j][i+1]); } } // cierre del mtodo TANGENTE(). void SECANTE(Graphics g) { int mm, N; double inicio = 0, fin = 5, incremento = 0.01; N = (int)((fin - inicio)/incremento) + 1; // determina el nmero de puntos. double xx[] = new double[N]; double yy[] = new double[N]; for(int i = 0; i < N; i++) { // crea las parejas de puntos. xx[i] = inicio + incremento * i; yy[i] = 1.0/Math.cos(3.0 * xx[i]); } Datos(xx,yy); // genera las parejas de puntos y la curva a ser trazada. EjesCoordenados(g); if(inser > numser) mm = numser; else mm = inser; for(int j = 0; j <= mm; j++) { // realiza el trazado de la curva. COLOR(g); for(int i = 0; i < n - 1; i++) g.drawLine(50 + x[j][i], MaxY - y[j][i], 50 + x[j][i+1], MaxY - y[j][i+1]); } } // cierre del mtodo SECANTE(). void COSECANTE(Graphics g) { int mm, N; double inicio = 0, fin = 5, incremento = 0.01; N = (int)((fin - inicio)/incremento) + 1; // determina el nmero de puntos. double xx[] = new double[N]; double yy[] = new double[N]; for(int i = 0; i < N; i++) { // crea las parejas de puntos. xx[i] = inicio + incremento * i; yy[i] = 1.0/Math.sin(3.0 * xx[i]); } Datos(xx,yy); // genera las parejas de puntos y la curva a ser trazada. EjesCoordenados(g); if(inser > numser) mm = numser; else mm = inser; for(int j = 0; j <= mm; j++) { // realiza el trazado de la curva. COLOR(g); for(int i = 0; i < n - 1; i++) g.drawLine(50 + x[j][i], MaxY - y[j][i], 50 + x[j][i+1], MaxY - y[j][i+1]); } } // cierre del mtodo COSECANTE().

void COTANGENTE(Graphics g) { int mm, N; double inicio = 0, fin = 5, incremento = 0.01; N = (int)((fin - inicio)/incremento) + 1; // determina el nmero de puntos. double xx[] = new double[N]; double yy[] = new double[N]; for(int i = 0; i < N; i++) { // crea las parejas de puntos. xx[i] = inicio + incremento * i; yy[i] = 1.0/Math.tan(xx[i]); } Datos(xx,yy); // genera las parejas de puntos y la curva a ser trazada. EjesCoordenados(g); if(inser > numser) mm = numser; else mm = inser; for(int j = 0; j <= mm; j++) { // realiza el trazado de la curva. COLOR(g); for(int i = 0; i < n - 1; i++) g.drawLine(50 + x[j][i], MaxY - y[j][i], 50 + x[j][i+1], MaxY - y[j][i+1]); } } // cierre del mtodo COTANGENTE(). void EjesCoordenados(Graphics g) { g.setColor(Color.black); g.drawLine(pos_ejex, 0, pos_ejex, 500); // dibuja semieje x. g.drawLine(0, pos_ejey, 500, pos_ejey); // dibuja semieje y. for(int i = 0; i < numd - 2; i++) { /* coloca los valores de los ejes * coordenados. */ g.drawString(Double.toString(etiqx[i]), 50 + posx[i], 20); g.drawString(Double.toString(etiqx[i]), 50 + posx[i], pos_ejey + 20); g.drawLine(50 + posx[i], pos_ejey - 5, 50 + posx[i], pos_ejey + 5); g.drawString(Double.toString(etiqy[i]), pos_ejex - 20, MaxY - posy[i]); g.drawLine(pos_ejex - 5, MaxY - posy[i], pos_ejex + 5, MaxY - posy[i]); } } // cierre del mtodo EjesCoordenados (); static void pausa() { try { Thread.sleep(1500); // Pausa en milisegundos. } catch(InterruptedException exc) {} return; } // cierre del mtodo pausa. void COLOR(Graphics g) { Random rnd = new Random(); // generador de nmeros rnd g.setColor(new Color(rnd.nextInt(255), rnd.nextInt(255), rnd.nextInt(255))); return; } void continuacion(Graphics g) { g.setFont(new Font("Arial Rounded MT Bold", Font.PLAIN,14)); g.drawString("Deseas seguir ejecutando?", 570, 400); Si.addActionListener(this); No.addActionListener(this); add(Si); Si.setBounds(new Rectangle(600, 380, 50, 30)); add(No); No.setBounds(new Rectangle(670, 380, 50, 30)); } void salida() { JOptionPane.showMessageDialog(null, "Ha sido un placer haber " + "trabajado con usted. Hasta luego...", "Salida", JOptionPane.INFORMATION_MESSAGE);

return; } // cierre del mtodo prueba. } // cierre de la clase PRUEBA.

Vous aimerez peut-être aussi