问题描述
我之前从未使用Java进行图形处理,所以我目前正在努力学习。
作为一项基本练习,我想将数组中包含的点绘制到数字行上,但我不确定如何开始。
我正在做以下绘制线:
public void drawNumberLine(Graphics g) {
g.drawLine(0,0,100,0);
}
不知道从哪里去,因为我不知道我将如何绘制线上的点。 我已经阅读了一些教程,但都处理了2D图,所以我想知道是否有人可以指导我正确的方向。
1楼
好吧,如果您有一个基线的大小,例如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_step
或i
不是整数,则可能需要舍pixels_per_step
。
2楼
您的阵列的数字范围是多少? 我假设你想缩小它以适应你的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数组,请确保避免整数除法。