![]() |
|
|
![]()
|
|
| rsm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 999 Регистрация: 16.3.2005 Репутация: нет Всего: 62 |
Нужно нарисовать график с двумя осями X и двумя Y (масштабы разные). Пример см. в аттаче. Как это реализовать? Нарисовать оси, штрихи делений и сами графики это я нарисую. А как рисовать цифры так, чтобы они не пересекались с осями графика?
Может быть кто-то встречал подобный пример? Заранее большое спасибо! Присоединённый файл ( Кол-во скачиваний: 44 )
graf.jpg 15,74 Kb |
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Не пойму вопроса.. CDC::DrawText, в котором для вывода задаешь прямоугольник. Координаты верхней точки его надо буде просто сместить относительно координат Х вниз, а левой точки влево, тносительно Y. Какие проблемы? -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: нет Всего: 26 |
Может ,rsm,имеет ввиду что текст должен как бы облегать график?(хотя по рисунку не скажешь)
-------------------- Жизнь - печальная штука. |
|||
|
||||
| rsm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 999 Регистрация: 16.3.2005 Репутация: нет Всего: 62 |
См. аттач: слева - правильно, справа - криво. Как недопустить пересечения текста с линией?
Это сообщение отредактировал(а) rsm - 29.10.2005, 19:35 Присоединённый файл ( Кол-во скачиваний: 25 )
num.png 0,56 Kb |
|||
|
||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: нет Всего: 26 |
rsm,а как должна висти себя твоя прога если случись так что линии графиков совсем рядом и не подписать так что бы она не пересекать одну из линий?
А так в теории у меня вот какие мысли(я просто пока в VC++ лузер): 1.Создаешь двумерный булев масcив размерами прямоугольника твоего текста. 2.Проверяешь "на цвет" прямоугольник в котором должен находится твой текст ,отмечая в массиве те пикселя которые по цвету не подходят.(просто график рисуется черным ,а фон серый) 3.Анализируешь массив и здвигаешь свой текст так чтобы цвет прямоугльника был везде был серым и снова к второму пункту. ЗЫ Алгоритм из головы брал ,но доработав (ИМХО) можно что-то придумать Это сообщение отредактировал(а) nikitao - 30.10.2005, 09:53 -------------------- Жизнь - печальная штука. |
|||
|
||||
| rsm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 999 Регистрация: 16.3.2005 Репутация: нет Всего: 62 |
nikitao
Не катит: 1. Еще сложнее. 2. Очень медленно. 2 all: Пока что придумал только один метод. Рассмотрим создание осей У (оси Х строятся аналогично). Рисование идет слева направо. 1. Ищем самую длинную строку. 2. Ищем координату последней буквы самой длинной строки. 3. Исходя из этой координаты получаем начальные координаты для всех строк текста. 4. Рисуем все строки текста с заданным масштабом (с интервалами по У). 5. Рисуем осевую линию графика 1. 6. Повторяем шаги 1~5 для графика 2, предварительно сделав отступ от осевой линии графика 1. Задача получается излишне сложная: нужно будет считать длину текста в пикселях с учетом размера шрифта, размеров экрана, масштаба графика. И одновременно следить за тем, чтобы текст разных осей не пересекался ни друг с другом, ни с осями. Кто-нибудь может предложить что-то попроще? |
|||
|
||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: нет Всего: 26 |
rsm,а может не парится.Сделать текст ,напротив,под графиком,а при нажатии или наведении курсора на ту или иную надпись она на какое то время становится поверх графика или выезжает над курсором строка с ее полным содержанием.Это не то что тебе нужно,но зато тормозов и гемора точно не будет.(ИМХО) Это довольно элегантное решение этой задачи.
Это сообщение отредактировал(а) nikitao - 30.10.2005, 16:54 -------------------- Жизнь - печальная штука. |
|||
|
||||
| rsm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 999 Регистрация: 16.3.2005 Репутация: нет Всего: 62 |
С удовольствием так бы и сделал если бы не одно но: графики будут поступать на печать. А на листе бумаги поверх графика ничего не вылезет, сколько в него не тыкай. |
|||
|
||||
| takedo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 1.6.2005 Репутация: нет Всего: 3 |
rsm
Ты чё? Это ведь просто, если я правильно понял. Берешь при инициализации своего графика делаешь следующее: //TEXTMETRIC tm; //dc.GetTextMetrics(&tm); CString str; CSize size; str.Format(_T("%d"),-(INT_MAX-1));//например size = dc.GetTextExtent(str); И в зависимости от size делаешь вывод на график числа через TextOut или DrawText с соответствующими координатами, которые не позволят выехать куда не надо. Если и это не спасает, то воспользуйся dc.GetTextMetrics(&tm); там тоже кучу параметров можно взять о фонте. Проблем то нет! -------------------- я не гольфист - я хоккеист |
|||
|
||||
| Coocky |
|
||||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
-------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
||||
|
|||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: нет Всего: 26 |
Coocky,проблема вот в чем:График не прямая и он может "извеваться" и "загибаться"=>точку графика которую мы надписываем не будет пересекать,а вот какую то другую-легко=>надо придумать алгоритм который проверяет не залезает ли надпись на любую точку графика.Они уже придуманы(см выше),но они тормаза и очень сложны в реализации,нужно что-то проще.
-------------------- Жизнь - печальная штука. |
|||
|
||||
| takedo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 1.6.2005 Репутация: нет Всего: 3 |
Да вы чё, в натуре?! -------------------- я не гольфист - я хоккеист |
|||
|
||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: нет Всего: 26 |
takedo,как я понял ты предлогаешь просто вынести все надписи в сторону,где нет графика.Если да,то это вариант,но (имхо) не очень хороший ибо не очень кпрасиво будет выгледеть.
-------------------- Жизнь - печальная штука. |
|||
|
||||
| takedo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 1.6.2005 Репутация: нет Всего: 3 |
nikitao тогда вопрос, а что же значит КРАСИВО? А для красоты можно ещё ведь и текстуру под линиями натягивать
-------------------- я не гольфист - я хоккеист |
|||
|
||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: нет Всего: 26 |
takedo,краасиво--это вот что:
Вспомни когда ты в школе учился,ты графики ресовал?подписывал? Ты что рисовал график на одной странице,а подписывл на другой? Добавлено @ 17:07
Это идея,но блин систему жрать много будет.(Еще блокнот давайте сделаем с применение DirectX 9.0c) -------------------- Жизнь - печальная штука. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |