2013-12-21 49 views
2

事实是,我正在尝试编写能够绘制数学函数的应用程序。该代码使平方函数的图形,并罚款。我的问题是我想制作三次函数。这是到目前为止我的代码:在java中绘制三次函数的最佳方法

import java.awt.Color; 
import java.awt.Graphics; 
import javax.swing.BorderFactory; 
import javax.swing.JPanel; 

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 x3mult, double x2mult, 
      double x1mult,double cons, double x1,double x2) 
    { 

     for(double i=x1;i<x2;i++) 
     { 
      double y = ((double)Math.cbrt(i)*x3mult)+((double)Math.pow(i,2)*x2mult)+i*x1mult+cons; 
      double xp = i+1; 
      double yp = ((double)Math.cbrt(xp)*x3mult)+((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); 
    } 
} 

然后主类,我调用的方法:

import java.awt.event.ActionEvent; 
import javax.swing.*; 
import java.awt.event.ActionListener; 
import graficadora.Graficadora; 

public class Ventana extends JFrame implements ActionListener{ 

    @Override 
    public void actionPerformed(ActionEvent e) { 

     Graficadora.plano.paintSQRFunc(Graficadora.plano.getGraphics(),1,1,0,0,-200,200); 

正如你看到的,我试图使它能够绘制三次函数。当我设置的参数绘制的三次函数,有我的错误:(它应该图形Y = X^3的曲线显示在90度倾斜。)

image

+2

检查两种方法[这里](http://stackoverflow.com/a/20556929/230513);不使用'getGraphics()',它不应该以所示的方式使用。 – trashgod

回答

2

它被认为是y = x^3。该图似乎倾斜90º。

我没有尝试你的代码,但我强烈怀疑问题就在这里:

double yp = ((double)Math.cbrt(xp)*x3mult) + // <-- Math.cbrt() ? 
      ((double)Math.pow(xp,2)*x2mult)+xp*x1mult+cons; 

如果你想显示第三级polynome然后Math.cbrt(xp)没有任何意义,因为每Math.cbrt(double a)的javadoc :

返回double值的立方体root

这个立方根只是“旋转”90°的功能图。它应该是:

double yp = ((double)Math.pow(xp,3)*x3mult) + 
      ((double)Math.pow(xp,2)*x2mult)+xp*x1mult+cons; 

也可以考虑看看到@trashgod here所示的例子。或者你可能想看看第三方库,如JFreeChart。有一些示例以herehere开头。