我正在为学校项目绘制罪(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;
}
哪个会产生如下所示的内容:
正如你所看到的那样,表示sin图的红线不能满足我的需要。由于某种原因,我无法将我的500x250 JFrame窗口的x坐标正确地增加到它将在正确位置结束的点。我需要它来停止我在灰线末端绘制蓝色箭头的位置。我该怎么做才能解决这个问题?感谢您的时间,感谢您提供的任何帮助。
答案 0 :(得分:1)
问题是,删除你的Math.round()函数,你会发现它是sin()函数值的四舍五入。我知道这会在drawLine函数中生成错误,因为它只需要整数参数,来解决这个问题类型转换,以防止有损转换。喜欢这个:
g.drawLine((int)xStart,(int)yStart,(int)xEnd,(int)yEnd);