0 votos
por (20 puntos) en Java
Buenas,

Alguien sabe como graficar una función f(x) en 2 dimensiones.

Desde ya se agradece toda ayuda.

jsavoila


11 Respuestas

0 votos
por (8.5k puntos)
Buenas!

Yo para gráficas he usado: http://www.jfree.org/jfreechart/

Hace tiempo que no se actualiza la versión pero si no quieres nada hacer algo muy complejo yo creo que te servirá.

Un saludo.


0 votos
por (3.2k puntos)
Desde mi punto de vista el JFreeChart es la mejor solucion por la calidad que tiene.

A continuacion un ejemplo de como hacer un graficador con JFreeChart.

En este caso graficare la sigueinte funcion f(x)=4sen(x).

=====================================================================

<pre lang='java' lineno='1'>/*
 * Autor: Roberto Perez
 * Potosi - Bolivia.
 */

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
import java.awt.Dimension;

public class Graficador extends ApplicationFrame{
    public Graficador(){
        super("Graficador");
        XYDataset paresDeDatos = generarDatos();
        JFreeChart diagrama = crearDiagrama(paresDeDatos);
        ChartPanel chartPanel = new ChartPanel(diagrama);
        chartPanel.setPreferredSize(new Dimension(500,400));
        setContentPane(chartPanel);
    }

    private XYDataset generarDatos(){
        //le pasamos una funcion generadora f(x)
        XYSeries datos = new XYSeries("Linea Funcion");
        for(double x=0.0; x<=50.0; x+=0.2) datos.add(x,f(x));

        XYSeriesCollection conjuntoDatos = new XYSeriesCollection();
        conjuntoDatos.addSeries(datos);

        return conjuntoDatos;
    }

    private JFreeChart crearDiagrama(XYDataset conjuntoDatos){
        JFreeChart diag = ChartFactory.createXYLineChart(
                                "Graficador", //Titulo Grafica
                                "X", // Leyenda eje X
                                "Y", // Leyenda eje Y
                                conjuntoDatos, // Los datos
                                PlotOrientation.VERTICAL, //orientacion
                                false, // ver titulo de linea
                                false, //tooltips
                                false  //URL
                            );
        return diag;
    }

    //aqui definimos la funcion que desees, en esta caso la f(x) = 4sen(x)
    private double f(double x){
        return 4*Math.sin(x);
    }

    public static void main(String[] arg){
        Graficador miGraficador = new Graficador();
        miGraficador.pack();
        RefineryUtilities.centerFrameOnScreen(miGraficador);
        miGraficador.setVisible(true);
    }
}
=============================

Ten en cuenta que debes tener instaldo las paquetes de JFreeChart de forma correcta


0 votos
por (3.2k puntos)
Para que veas como queda subi la imagen de la ejecucion en la siguiente enlace:

http://www.subirimagenes.com/imagen-grafseno-4632743.html


0 votos
por (80 puntos)
Hola quetal a todos estoy iniciandome en java, eh investigado mucho sobre el jfreechart es una buena herramienta, yo lo que quisiera hacer es que no solo me grafique el seno como en el codigo que publico FIURER87, pues lo estoy adaptando pero quiero recibir el valor de X por el usuario y pues creando el constructor me sale error alguien podria ayudarme???

<pre lang='java' lineno='1'>private double x;// miembro de la clase graficador

//mi constructor
Graficador(double valor) {
       x=valor;
    }
0 votos
por (8.5k puntos)
No se si te entiendo bien, pero con un solo valor de x, no tienes una función, tienes un punto...

y = f(x)

¿Que pretendes hacer con la x que le pasas, obtenida del usuario?

Un saludo.


0 votos
por (3.2k puntos)
un constructor debe ser antepuesto por la palabra reservada public


public class Graficador{
   private double x;

   //constructor
   public Graficador(double valor){
         x = valor;
   }
}

0 votos
por (80 puntos)
gracias por responder, bueno lo que quiero hacer es que desde ese valor de X obtenido del usuario con el for, dado el limite que yo le coloque me vaya generando la grafica, aunque por ahora solo puedo hacer que me grafique sen(x) o cos(x) y las demas funciones trigonometricas, pero tengo otra duda ahora como podria hacer para que grafique por ejemplo: 1+ sen(x)+ cos(x) , alguna idea?


0 votos
por (3.2k puntos)
en el codigo que publique mas arriba solo debes cambiar la funcion f(x) por la que desees.

por ejemplo para 1+ sen(x)+ cos(x) la f(x) debe ser:


//x es el angulo en Radianes.
private double f(double x){
     return 1 + Math.sin(x) + Math.cos(x);
}

0 votos
por (80 puntos)
Fiurer me podrias ayudar a completar este programa que haz compartido.

Necesito que el usuario introduzca el valor de x  o con un rango de valores y asi determinar la funcion ... otra cosa es que necesito utilizar funciones que no sean solo en funcion de x sino que tengan constantes y demas .. por favor si me podrias ayudar te lo agradeceria mucho
0 votos
por (80 puntos)
Fiurer Como puedo contactar contigo para hacerte unas preguntar .. porfavor respondeme :D

Preguntas relacionadas

0 votos
5 respuestas
preguntado por genis (40 puntos) Ene 28, 2016 en Java
0 votos
1 respuesta
0 votos
3 respuestas
0 votos
1 respuesta
0 votos
0 respuestas
Bienvenido a Dudas de Programación, donde puedes hacer preguntas y recibir respuestas sobre los problemas más frecuentes de los lenguajes de programación, frameworks de desarrollo y bases de datos que utilices. Foro de Línea de Código

Categorías

...