1-мерные графики с Java - PullRequest
3 голосов
/ 29 марта 2011

Я никогда раньше не использовал Java для графики, поэтому сейчас пытаюсь научиться.

В качестве базового упражнения я хочу нанести точки, содержащиеся в массиве, на числовую линию, но не знаю, как это сделать.Начало работы.

Я делаю следующее, чтобы нарисовать линию:

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

Не уверен, куда идти, потому что я не знаю, как я смогу построить точкина линии.Я прочитал несколько учебных пособий, но все они касались 2D-графиков, поэтому мне было интересно, сможет ли кто-нибудь направить меня в правильном направлении.

Ответы [ 2 ]

1 голос
/ 29 марта 2011

Какой диапазон номеров у вашего массива? Я предполагаю, что вы хотите уменьшить его до 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, избегайте целочисленного деления.

1 голос
/ 29 марта 2011

Что ж, если у вас есть размер базовой линии, например, 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 не является целым числом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...