![]() |
|
|
![]()
|
|
| keeper1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 19.11.2010 Репутация: нет Всего: нет |
Пришлось создавать еще одну тему...
В общем вопрос такой. Надо разработать программу для построения графика функции с осями координат по заданным во внешнем файле точкам. Считывает из файла моя прога нормально, выводит на экран значения в ListBox, затем рисует график по точкам с помощью LineTo. НО! Не знаю,как задать и нарисовать оси координат графически, чтобы начало отсчета было в нижнем левом углу а не в верхнем левом как пол умолчанию. Подскажите,пожалуйста Вот так рисую графику:
|
|||
|
||||
| Proxin |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 363 Регистрация: 21.6.2008 Репутация: нет Всего: 3 |
Ищите низ MyDC.
|
|||
|
||||
| keeper1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 19.11.2010 Репутация: нет Всего: нет |
Что значит низ?
|
|||
|
||||
| Proxin |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 363 Регистрация: 21.6.2008 Репутация: нет Всего: 3 |
Bottom либо Height, точно не помню.
|
|||
|
||||
| keeper1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 19.11.2010 Репутация: нет Всего: нет |
А поподробнее? Как именно это надо сделать?Из ваших объяснений почти ничего неясно
|
|||
|
||||
| keeper1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 19.11.2010 Репутация: нет Всего: нет |
Ну подскажите мне кто-нибудь по-нормальному,пожалуйста!
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Интересно, что ты будешь делать, если эти px будут, скажем, плавающими числами от 0 до 1. Или, наоборот, очень большими, так что в экран не влезут. Выход: пересчитывать координаты. Т.е. отображать области определения и значения функции в экранные координаты, с помощью простеньких линейных преобразований. Тут и с осями все наладится. где надо, там и сделаешь 0. Можно еще поиграться с SetViewOrigin и прочими установками системы координат DC, но лучше ручками: во-первых, через задание координат DC не универсально (все те же действительные числа), во-вторых, лучше поймешь. -------------------- ... |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
keeper1,
Если это то, что требуется в задании, то замена ориентации осей совершенно не нужна и стандартных функций рисования хватит тут за глаза. А пересчитать значения координат - простейшая задача примерно на уровне 6 класса начальной школы ;) Если уж совсем приспичило, то ты можешь поменять режим вывода с помощью функции SetMapMode(), в этих режимах есть как раз ориентированные как тебе нужно. Но если тебе требуется только то, что ты написал, то это лишнее телодвижение. У тебя не сделана очень важная вещь - не отделено физичекое пространство координат от экранного. Если на входе получаешь данные в физических коордиатах, их надо преобразовывать в экранные. Если же уже получаешь сразу в экранных, то тогда вообще ничего преобразовывать не нужно. А формулы преобразования, как я говорил, гораздо проще, чем кажутся. Вспомни уроки геометрии в шестом классе школы. Смотри приложенный рисунок. Здесь Уэ, Хэ - экранные координаты, а Уф,Хф - физические. Чтобы построить график, сначала нужно определиться с границами построения - теми, которые у тебя будут крайними значениями. Им будут соответствовать координаты на экране. Соответственно крайние значения физических координат задаем как Хф1,Хф2,Уф1,Уф2. А экранные задаем как Хэ1,Хэ2,Уэ1,Уэ2. Причем экранные задаем именно в экранной системе координат, см. рисунок. Тогда любую точку физического пространства можно перевести на экран по следующим формулам: Хэ = Хэ1 + (Хэ2 - Хэ1) * (Хф - Хф1) / (Хф2 - Хф1); Уэ = Уэ2 - (Уэ2 - Уэ1) * (Уф - Уф1) / (Уф2 - Уф1). Все, и не надо думать о направлении осей! Но если и это лень делать - поищи, в инете масса готовых dll, которые рисуют графики. Например, вот тут есть dll для построения графиков, для построения выделяешь массивы и заполняешь физическими координатами, задаешь области рисования, запускаешь еще пару функций, и графи строется в указанном окне: http://svsft.com/index.php?content=graphicscppdll Прикладываю рисунок, поясняющий преобразование физических координат в экранные: -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |