当前位置: 代码迷 >> java >> Java的1维图
  详细解决方案

Java的1维图

热度:95   发布时间:2023-07-31 12:11:53.0

我之前从未使用Java进行图形处理,所以我目前正在努力学习。

作为一项基本练习,我想将数组中包含的点绘制到数字行上,但我不确定如何开始。

我正在做以下绘制线:

public void drawNumberLine(Graphics g) {
    g.drawLine(0,0,100,0);
}

不知道从哪里去,因为我不知道我将如何绘制线上的点。 我已经阅读了一些教程,但都处理了2D图,所以我想知道是否有人可以指导我正确的方向。

好吧,如果您有一个基线的大小,例如100个像素,以及一个起始值,例如0个像素,您可以计算精确的像素,为该点绘制一些标记。

例:

线代表整数10到20,从50到150像素绘制:

x_offset = 50
lower_bound = 10
width = 100 pixels //(150 - 50)
range = 10 //(20 - 10)
pixels_per_step = width/range = 100/10 = 10

因此,将绘制每个整数标记i

x = x_offset + pixels_per_step * (i - lower_bound) => (replace constants)
x = 50 + 10 * (i - 10) => (example for i = 15)
x = 50 + 10 * (15 - 10) = 50 + 10 * 5 = 50 + 50 = 100 => draw marker 15 at 100 pixels

这应该让你开始。 请注意,如果pixels_per_stepi不是整数,则可能需要舍pixels_per_step

您的阵列的数字范围是多少? 我假设你想缩小它以适应你的100长线? 这只是正数吗? 在这种情况下,这样的事情应该有效

//Find the max value for scaling purposes
double max = Double.MIN_VALUE;
double min = Double.MAX_VALUE
for(double i : array){
    if(i > max) max = i;
    if(i < min) min = i;
}


for(double i : array){
    //Replace 100 with a variable for how long the line is!
    double scaled = ((i-min)/(max-min)) * 100; 

    Ellipse.Double circle = new EllipseDouble(width, height, scaled, 0);

    g2d.draw(circle)
}

如果是int数组,请确保避免整数除法。

  相关解决方案