根据像素(Java)正确缩放x轴

时间:2015-02-27 22:27:43

标签: java graph scaling sin

我正在为学校项目绘制罪(x)图。目前我的一切都按照我想要的方式工作,除了一件事:x轴的缩放。

以下是我目前使用的代码:

    int xStart = xShift;
    int xEnd = xShift;
    int yStart = getHeight() / 2;
    int yEnd = getHeight() / 2;
    int scale = getHeight() / 2;
    double constraint = 0.80;

    for (double i = Math.PI / 32; i <= Math.PI * 2; i+= Math.PI / 32){
        xEnd +=  (getWidth() - (2 * xShift) / 64);
        yEnd = (scale - ((int) Math.round(Math.sin(i) * scale * constraint))) ;
        g.drawLine(xStart, yStart, xEnd, yEnd);
        xStart = xEnd;
        yStart = yEnd;
    }

哪个会产生如下所示的内容: enter image description here

正如你所看到的那样,表示sin图的红线不能满足我的需要。由于某种原因,我无法将我的500x250 JFrame窗口的x坐标正确地增加到它将在正确位置结束的点。我需要它来停止我在灰线末端绘制蓝色箭头的位置。我该怎么做才能解决这个问题?感谢您的时间,感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

问题是,删除你的Math.round()函数,你会发现它是sin()函数值的四舍五入。我知道这会在drawLine函数中生成错误,因为它只需要整数参数,来解决这个问题类型转换,以防止有损转换。喜欢这个:

g.drawLine((int)xStart,(int)yStart,(int)xEnd,(int)yEnd);