您好,我正在尝试创建一个Java程序,该程序可让您绘制方程式,并且到目前为止,它一直运行良好,直到我希望它绘制余弦和正弦函数图为止。当正弦和余弦返回双精度值但drawLine只接受整数时,我对如何执行此操作感到困惑。我是java的新手,所以这可能很容易,但是如果您能帮忙,我将不胜感激。

这是我的代码:

import java.util.Scanner;
import javax.swing.JFrame;
import javax.swing.*;
import java.awt.*;
import java.lang.Math;
import java.awt.geom.*;

class PlotGraph extends JFrame{


public void paintComponent(Graphics g){
    Graphics2D g2 = (Graphics2D) g;

    g.drawLine(50, 300, 550, 300); //x axis
    g.drawLine(300, 550, 300, 50); //y axis
    //Orignin x = 300 y = 300

    double xmin, xmax;
    double y;
    xmin =(0);
    xmax = 100;
    double x = xmin;

    double form = Math.cos(x);

    double last_y = 300-(form);

    for (x = xmin+1; x<=xmax; x++){
    double newForm = Math.cos(x);
    y = 300-(newForm);
    g2.draw(new Line2D.Double(x-1+(300), last_y, x+300, y));
    last_y = y;

    }




}

public static void main(String [] args) {

    PlotGraph graph = new PlotGraph();
    graph.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    graph.setSize(600, 600);
    graph.setVisible(true);
    graph.setTitle("PlotGraph");

}
}

最佳答案

由于Math.cos()返回的值介于-1和1之间,将其强制转换为int只会得到3个值-1、0和1,并且几乎总是0。

您要做的是将双精度数乘以一个大常数以创建整数范围:

    y = 300-(int)(300d * newForm);


注意300后面的“ d”:这使300成为两倍,如果乘法也加倍,则结果保持细粒度。

09-30 14:57