Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Масштабирование графика

284
28 сентября 2005 года
michael_is_98
587 / / 25.02.2005
Интересует решение такой общей задачи:
есть множество значений пар (X, Y).
Нужно нарисовать кривую, соединяющую эти точки.
Но сделать это "красиво" - т.е. график должен занимать клиентскую часть окна, причем число делений (вместе с подписями) по осям X,Y заранее не известно и должно определяться в программе.
Множетсво пар может быть представлено вещественными или целыми числами.
Если у кого-нибудь есть идеи или занимались решением таких задач - поделитесь.
Самое важное - это используемый режим отображения координат.
6.7K
02 октября 2005 года
Metalslave
37 / / 24.08.2004
Цитата:
Originally posted by michael_is_98
Интересует решение такой общей задачи:
есть множество значений пар (X, Y).
Нужно нарисовать кривую, соединяющую эти точки.
Но сделать это "красиво" - т.е. график должен занимать клиентскую часть окна, причем число делений (вместе с подписями) по осям X,Y заранее не известно и должно определяться в программе.
Множетсво пар может быть представлено вещественными или целыми числами.
Если у кого-нибудь есть идеи или занимались решением таких задач - поделитесь.
Самое важное - это используемый режим отображения координат.


Ищем коофицент по оси x и y:
cofX = Max(график.X)/клиентское_окно.ширина;
cofY = Max(график.Y)/клиентское_окно.высота;
---
Деления на осях ставишь умножая на коофициенты по них, и так же и точки графика.
Элементраная задача!!!

284
03 октября 2005 года
michael_is_98
587 / / 25.02.2005
Цитата:
Originally posted by Metalslave
Ищем коофицент по оси x и y:
cofX = Max(график.X)/клиентское_окно.ширина;
cofY = Max(график.Y)/клиентское_окно.высота;
---
Деления на осях ставишь умножая на коофициенты по них, и так же и точки графика.
Элементраная задача!!!


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

6.7K
03 октября 2005 года
Metalslave
37 / / 24.08.2004
Цитата:
Originally posted by michael_is_98
Если нужно вывести график, то с помощью коэффициентов это действительно элементарно.
Но проблема заключается в расстановке делений...
Нужно знать число делений, чтобы график выглядел красивее. Ведь подписи могут друг на друга накладываться.


Число делений пусть у тебя будет константой, подбери визуально в зависимости от ширины/высоты клиентской формы. Например по X пусть будет 10 делений, а значения в эти деления заносишь уже согласно данным графика (если хочешь то только круглые числа).
Ты вообще на чем пишешь? Если на Делфе, там есть компонент который решит все твои проблемы сразу TChart. Так же если ну очень нуно, я накатаю тебе прогу. ;)

391
03 октября 2005 года
Archie
562 / / 03.02.2005
Чтобы красиво деления на шкале расставить, бери не максимальные значения, а логарифм (десятичный) этих значений. Тогда цифры на шкале будут не 1.245, 2.365, 3.035,... но красивые (1, 2, 3,...)
Т.е. шаг шкалы считай, как
step = 10^([log(max)] - 1) - получишь 10 делений на шкалу.
284
03 октября 2005 года
michael_is_98
587 / / 25.02.2005
Цитата:
Originally posted by Metalslave
Число делений пусть у тебя будет константой, подбери визуально в зависимости от ширины/высоты клиентской формы. Например по X пусть будет 10 делений, а значения в эти деления заносишь уже согласно данным графика (если хочешь то только круглые числа).
Ты вообще на чем пишешь? Если на Делфе, там есть компонент который решит все твои проблемы сразу TChart. Так же если ну очень нуно, я накатаю тебе прогу. ;)


На MFC с использованием GDI. Вопрос этот скорее из области теории (качественный компонент хотелось бы сделать), если хочешь - можешь сделать что-то подобное, с интересом посмотрю.
На самом деле там вроде есть целый алгоритм для расчета этих отметок на осях. Т.е. задается минимальное / максимальное число делений по каждой оси. И в зависимости от размаха по осям рассчитывается наилучшее число делений. Вроде так. Более-менее понятное описание нашел на
http://www.rsdn.ru/Forum/Message/77668.htm

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог