График GDI
1) с сохранением масштаба одинаковым по оси абсцисс и ординат
2) с разным масшабом по оси абсцисс и ординат
В первом случае задается минимальное/максимальное значение для оси абсцис, минимальное/максимальное деление для оси ординат.
Для оси абсцисс эти значения остаются неизменными в любом случае.
Для оси ординат разность максимального и минимального должна оставаться неизменной при заданной ширине/высоте области рисования в пикселах. И должна пересчитываться при изменении размеров области рисования для того, чтобы по оси абсцисс и ординат деления были одинаковыми.
Подбором макс./минимального значений по оси ординат и оси абсцисс можно задать именно ту область, на которой виден график.
Плюсы - одинаковое делений по оси абсцисс и оси ординат, видны пропорции.
Минусы - нельзя увидеть весь график, если он не помещается в область графика или указанные значения не позволяют его увидеть.
Во втором случае для того, чтобы поместить весь график в заданную клиентскую область подсчитываюся масштабные коэффициенты, и путем простых преобразований график целиком помещается в эту область.
Плюсы - виден сразу весь график, минусы - различаются деления по оси абсции и ординат, т.е. сложнее увидеть пропорции в этом случае.
У меня вопрос ко всем присутствующим - нельзя ли объединить достоинства двух методов ? Т.е. чтобы деления по осям абсцисс и ординат были одинаковыми, а их мин/макс. значения подбирались так, чтобы вместить график в область рисования?
Ну ты нагородил... у тебя же есть минимумы и максимумы, я правильно понял? Так масштабируй. Пусть тот, кому это смотреть, сам выбирает как он должен это видеть. А деления ДОЛЖНЫ быть по обеим осям одинаковыми, если, конечно, не принадлежат разным единицам измерения. А в качестве фишки добавь возможность увидеть покрупнее любую часть графика,а не только его центр - и все тебя поймут.
Потом, представьте, что нужно вывести 1000 точек по горизонтали при ширине области вывода в 300 пикселей по горизонтали. Некоторые пиксели будут накладываться друг на друга. И вывод графика будет медленным. Т.е. для данной ширине области вывода достаточно брать не все точки.
И еще одна сложность - передача структуру по тому, что именно рисовать в тот компонент, который будет затем все это прорисовывать.
Ты ЗАДАЧУ изложи, а? А то что тебе нужно по твоим "соображениям" в упор не понятно. Скажи хоть что "дано" и что "требуется".
Задача просто - обеспечить вывод 2-д графика с помощью GDI, при этом деления по осям одинаковы (сохраняют пропорции), для вывода задаются мин. и макс. значения по оси абсцисс, мин. значение по оси ординат (макс. подсчитывается автоматом), ширина, высота в пикселах рисунка и его левый верхний угол (в пикселах). Данные могут быть представлены в виде одномерного массива вещ. чисел известной длины или (не И!) в виде функции одного аргумента в текст. виде.