java - 在java中绘制三次函数图形的最佳方法

标签 java swing graph

事实上,我正在尝试编写一个能够绘制数学函数图形的应用程序。该代码制作了平方函数的图形,并且效果很好。我的问题是我想制作三次函数。这是我到目前为止的代码:

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

最佳答案

It is supposed to graph y=x^3. The graph appears to be tilted in 90º.

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

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

如果您想显示三年级多项式,则 Math.cbrt(xp) 没有意义,根据Math.cbrt(double a) javadoc:

Returns the cube root of a double value.

这个立方根只是将函数图“旋转”90°。应该是:

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

还可以考虑看看 @trashgod 显示的示例 here 。或者您可能想看看第三方库,例如 JFreeChart 。有一些示例可以从显示的 here 开始和here .

关于java - 在java中绘制三次函数图形的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20719191/

相关文章:

java - Install4j:窗口定位

java - 按字母顺序对列表进行排序,头部有特定值(如果存在)

c++ - 将类型对列表的 vector 大小设置为用户在类中给定的大小

javascript - 多个X轴标签谷歌图表

java - 调用 quit() 后无法使用 WebDriver FirefoxDriver

java - 如何获取特定字符串前的空格索引?

java - 比较 JTable 中的 2 列的日期

java - 无法在 [java] 中执行计时器

java - 我可以让自动化 java 应用程序忽略 JOptionPanes 吗?

python - 从社区共现矩阵到每个节点的社区索引