您好,我正在尝试创建一个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成为两倍,如果乘法也加倍,则结果保持细粒度。