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

标签 java graph scaling trigonometry

我正在为学校项目绘制 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

正如您所看到的,指示正弦图的红线未达到我需要的位置。由于某种原因,我无法使 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/

相关文章:

Java Spring从html表单获取数据

SwiftUI:缩放 View 中的形状

ios - 如何重新缩放贝塞尔路径

algorithm - 最先进的图形着色元启发式

javascript - 安卓浏览器 : get scale factor

java - 配置属性注释问题

java - 如何从 StringBuilder 获取值并将其传递给另一个 Activity ?

java - 无法在 Dataflow SDK 2.1.0 中创建可执行 Jar

java - 多线程环境下的 Neo4j 图操作

漂亮日志标签的算法