@ Тедил заметил ошибку или, по крайней мере, очень хорошее предположение.
Сказав это, я бы взял свои очки, масштабировал и компенсировал их.
Затем просто перебираем коллекцию в коде краски.
Хорошая особенность этого способа в том, что min и max X и Y дают вам ограничивающий прямоугольник, поэтому сначала вы просто рисуете его, сортируете масштабирование / изменение размера, затем рисуете точки и декорируете на основе масштабированных координат.
Код рисования болезнен для отладки, поэтому я предпочитаю делегировать как можно больше математических вычислений и сортировать «углы», прежде чем загромождать код украшением.
Вы также можете получить умную оптимизацию, когда есть много точек, или посмотреть на построение «за кадром», если оно очень динамичное.
Не парень по Java.
Даже если вы можете загрузить набор данных из своего набора в набор точек, например,
Точка - это структура из двух чисел с плавающей точкой, называемых X и Y
And Points - упорядоченный список (по X)
Тогда отработайте границы
Просто прокрутите точки для min и max Y, у вас уже есть X, поскольку они являются порядком, так что это только первый и последний
Рационализируйте их, если требуется, то есть Origin равен 0,0 MaxX = 7658, поэтому назовите его 8000, MaxY равен 84, поэтому назовите его 100.
Так что теперь ваши точки могут быть ограничены прямоугольником (0,0,8000,100), поэтому
ActtualHeight = 100, actualWidth = 8000 (рассчитайте это, чтобы справиться с отрицательной осью)
В некоторых случаях, когда вы определили, что ваша область черчения составляет 755 х 384, а начало координат будет нанесено на 30, 45.
То есть XRatio = (Double) actualWidth / 755, а YRatio = ...
переберите действительные точки и создайте другой список масштабированных точек, добавьте смещение, инвертируйте для Y
Затем проведите линию от точки 0 до 1, от 1 до 2, от n-1 до n)
Это все очень простые вещи, просто разбейте рисунок всего графика на несколько простых простых шагов. Подумайте, как бы вы сделали это с помощью миллиметровки, линейки и карандаша HB. * 1023 *
Например, вы можете легко определить размер шага для своих тиков.
Затем используйте положение галочки и ориентацию, чтобы определить, где находится метка галочки.
Вы можете центрировать свое описание, заголовок и т. Д.
Трюк относительное расположение.
Метка оси X, скажем, на 20 пикселей ниже линии оси X и центрирована между X AxisStart и end.
Не пытайтесь делать все это в одном цикле, используя абсолютные координаты.
PS сначала заставьте его работать, а затем посмотрите на умное ...