Graficadora de funciones cuadradas en Java con Swing

Aqui les dejo el codigo y el video tutorial para la graficadora, esta graficadora es muy sencilla, sin embargo para lo que sirve les dejo las 3 clases basicas que la conforman.

Para el codigo se recomienda ampliamente tener conocimientos matematicos de funciones cuadradas asi como alguna base de aplicaciones swing en Java.

Video tutorial:

Codigo fuente:

package graficadora;

import javax.swing.*;
import java.awt.*;

/**
 *
 * @author jorge
 */
public class Graficadora {

    //Importante, plano debe ser publico y estatico
    public static plano plano;

    public static void main(String[] args) {

        //Creando la ventana y el plano de dibujo
        Ventana frame = new Ventana();
        frame.setDefaultCloseOperation(Ventana.EXIT_ON_CLOSE);
        frame.setBounds(300, 300, 510, 600);
        frame.setLayout(new BorderLayout());
        plano = new plano();

        //Configuración del Boton
        JButton start = new JButton("Iniciar");
        start.addActionListener(frame);
        start.setText("Iniciar");

        //Bordes al panel
        frame.add( plano, BorderLayout.CENTER);
        frame.add(start, BorderLayout.SOUTH);

        frame.setVisible( true );

    }
}

 

package graficadora;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
/**
 *
 * @author jorge
 */
public class plano extends JPanel{

    public plano() {
        init();
    }

    public void init() {
        this.setBorder(BorderFactory.createLineBorder(Color.black));
    }

    @Override 
     public void paintComponent( Graphics g ) {
                    super.paintComponent(g);

                    g.setColor(Color.red);

                    g.drawLine(0, this.getHeight()/2, this.getWidth(), this.getHeight()/2);
                    g.drawLine(this.getWidth()/2, 0,this.getWidth()/2 , this.getHeight());

                 }

    // y=c*x2 +c*x +c

     public void paintSQRFunc(Graphics g, double x2mult,
             double x1mult,double cons, double x1,double x2)
     {

         for(double i=x1;i<x2;i++)
         {
             double y = ((double)Math.pow(i,2)*x2mult)+i*x1mult+cons;
             double xp = i+1;
             double yp = ((double)Math.pow(xp,2)*x2mult)+xp*x1mult+cons;
             g.drawLine((int)coord_x(i), (int)coord_y(y), (int)coord_x(xp), (int)coord_y(yp));

         }
     }

     private double coord_x(double x)
     {
         double real_x = x+this.getWidth()/2;
        return real_x;
     }
     private double coord_y(double y)
     {
          double real_y = -y+this.getHeight()/2;

          return (real_y);
     }
}

 

package graficadora;
import java.awt.event.ActionEvent;
import javax.swing.*;
import java.awt.event.ActionListener;
import graficadora.Graficadora;
/**
 *
 * @author jorge
 */
public class Ventana extends JFrame implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent e) {

       Graficadora.plano.paintSQRFunc(Graficadora.plano.getGraphics(),-0.2,2,-15,-200,200);
    }

}

 

Acerca del autor:

Mi nombre es Jorge Villalobos, soy Colombiano de nacimiento y resido en México desde 2005,actualmente soy el creador de codigoprogramacion.com Soy ingeniero en tecnologías de información y comunicaciones y trabajo de tiempo completo desarrollando aplicaciones web. En general me considero un tipo normal, me gusta salir, divertirme, y uno de mis hobbies es programar y hacer tutoriales para compartir conocimiento, me gusta la pizza, el ajedrez y tomar una que otra cerveza los fines de semana. Espero que este proyecto ayude a ayudar a los demás.

Twitter del autor:

5 comments

  1. Audelino says:

    Bro de casualidad sabes co o lo paso a BlueJ?

  2. Anai says:

    Muchas gracias por este programa, me has ayudado mucho. Gracias y exito en todo

  3. Javier says:

    Saludos Jorge.
    La explicación está excelente, a pesar que es un tema que cuesta a muchos tal como mencionas. Tengo tres consultas a ver si deseas ayudarme.

    1. En la clase ventana escribes esta linea: Graficadora.plano.paintSQRFunc(Graficadora.plano.getGraphics(),-0.2,2,-15,-200,200);
    La cual es para realizar el gráfico de la función cuadrática SQRF hace alusión a dicha función, ¿con qué lo reemplazaría si deseo la gráfica de la función lineal o la cúbica?

    2. En caso que los parámetros de la función deban ser ingresados por el usario, para no tener que estar modificando el código cada vez que se desea realizar un gráfico, se que es necesario usar la lectura con Scanner sin embargo no sé como haría para asignar dichos valores a las variables (que corresponde a las coordenadas).

    3. ¿cómo haría para que desde la misma JFrame pueda decidir el tipo de función a graficar (lineal, cuadrática, cúbica), sin que tenga que modificar los parámetros en el código por ejemplo no hacer x^2=0 para la función lineal?
    Muchas gracias por tu ayuda.

  4. rene says:

    Hola me da gusto que haces eso, oye el algoritmo de la linea DDA lo has programada alguna vez… disculpa dime como empezar

  5. Tengo una super duda. Ando buscando la forma de aprender hacer una graficadora, pero lo que busco es que en lugar de la linea __________ que muestra la funcion, aparesca mi nombre “LEONARDO”. Como puedo hacer eso.

Leave a Reply

Your email address will not be published. Required fields are marked *