我正在为学校项目绘制 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;
}
这会产生如下所示的结果:
正如您所看到的,指示正弦图的红线未达到我需要的位置。由于某种原因,我无法使 500x250 JFrame 窗口的 x 坐标正确递增到在正确位置结束的点。我需要它停在我绘制的蓝色箭头的位置,即灰线的末端。我可以做什么来解决这个问题?感谢您抽出宝贵时间,并感谢您提供的任何帮助。
最佳答案
问题是,删除你的 Math.round() 函数,你会看到它是对 sin() 函数的值进行舍入。我知道这会在 drawLine 函数中产生错误,因为它只需要整数参数,以解决这个问题类型转换以防止有损转换。像这样:
g.drawLine((int) xStart,(int) yStart, (int) xEnd, (int) yEnd);
关于java - 根据像素正确缩放 x 轴 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28775420/