Dudas de Programacion » Java » Java Básico

Graficar función f(x)

(9 posts)
  1. jsaviola
    Member

    Buenas,
    Alguien sabe como graficar una función f(x) en 2 dimensiones.
    Desde ya se agradece toda ayuda.

    jsavoila

    Posted 1 year ago #


  2. 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.

    Saludos
    Posted 1 year ago #
  3. fiurer87
    Member

    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).
    =====================================================================

    1. /*
    2.  * Autor: Roberto Perez
    3.  * Potosi - Bolivia.
    4.  */
    5.  
    6. import org.jfree.chart.ChartFactory;
    7. import org.jfree.chart.ChartPanel;
    8. import org.jfree.chart.JFreeChart;
    9. import org.jfree.chart.plot.PlotOrientation;
    10. import org.jfree.data.xy.XYDataset;
    11. import org.jfree.data.xy.XYSeries;
    12. import org.jfree.data.xy.XYSeriesCollection;
    13. import org.jfree.ui.ApplicationFrame;
    14. import org.jfree.ui.RefineryUtilities;
    15. import java.awt.Dimension;
    16.  
    17. public class Graficador extends ApplicationFrame{
    18. public Graficador(){
    19. super("Graficador");
    20. XYDataset paresDeDatos = generarDatos();
    21. JFreeChart diagrama = crearDiagrama(paresDeDatos);
    22. ChartPanel chartPanel = new ChartPanel(diagrama);
    23. chartPanel.setPreferredSize(new Dimension(500,400));
    24. setContentPane(chartPanel);
    25. }
    26.  
    27. private XYDataset generarDatos(){
    28. //le pasamos una funcion generadora f(x)
    29. XYSeries datos = new XYSeries("Linea Funcion");
    30. for(double x=0.0; x<=50.0; x+=0.2) datos.add(x,f(x));
    31.  
    32. XYSeriesCollection conjuntoDatos = new XYSeriesCollection();
    33. conjuntoDatos.addSeries(datos);
    34.  
    35. return conjuntoDatos;
    36. }
    37.  
    38. private JFreeChart crearDiagrama(XYDataset conjuntoDatos){
    39. JFreeChart diag = ChartFactory.createXYLineChart(
    40. "Graficador", //Titulo Grafica
    41. "X", // Leyenda eje X
    42. "Y", // Leyenda eje Y
    43. conjuntoDatos, // Los datos
    44. PlotOrientation.VERTICAL, //orientacion
    45. false, // ver titulo de linea
    46. false, //tooltips
    47. false //URL
    48. );
    49. return diag;
    50. }
    51.  
    52. //aqui definimos la funcion que desees, en esta caso la f(x) = 4sen(x)
    53. private double f(double x){
    54. return 4*Math.sin(x);
    55. }
    56.  
    57. public static void main(String[] arg){
    58. Graficador miGraficador = new Graficador();
    59. miGraficador.pack();
    60. RefineryUtilities.centerFrameOnScreen(miGraficador);
    61. miGraficador.setVisible(true);
    62. }
    63. }

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

    Posted 1 year ago #
  4. fiurer87
    Member

    Para que veas como queda subi la imagen de la ejecucion en la siguiente enlace:

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

    Posted 1 year ago #


  5. 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???

    1. private double x;// miembro de la clase graficador
    2.  
    3. //mi constructor
    4. Graficador(double valor) {
    5. x=valor;
    6. }
    Posted 1 year ago #
  6. 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.

    Posted 1 year ago #
  7. fiurer87
    Member

    un constructor debe ser antepuesto por la palabra reservada public

     
    public class Graficador{
       private double x;
     
       //constructor
       public Graficador(double valor){
             x = valor;
       }
    }
     
    Posted 1 year ago #


  8. 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?

    Posted 1 year ago #
  9. fiurer87
    Member

    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);
    }
     
    Posted 1 year ago #

Reply

You must log in to post.

934 posts in 393 topics over 36 months by 348 of 784 members. Latest: kardelen133, hugoivand, danymota19

Acerca de...

Dudas de Programación es una Web, dentro del proyecto aulambra.com que nace con la idea de propocionar un foro de consultas sobre diferentes temas de programación. Orientado a ayudar a los internautas hispano-hablantes en Internet.

Ir al Blog de Linea de Código

Otras Webs