| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Нарисовать оси координат |
| Автор: keeper1 19.11.2010, 16:53 | ||
| Пришлось создавать еще одну тему... В общем вопрос такой. Надо разработать программу для построения графика функции с осями координат по заданным во внешнем файле точкам. Считывает из файла моя прога нормально, выводит на экран значения в ListBox, затем рисует график по точкам с помощью LineTo. НО! Не знаю,как задать и нарисовать оси координат графически, чтобы начало отсчета было в нижнем левом углу а не в верхнем левом как пол умолчанию. Подскажите,пожалуйста Вот так рисую графику:
|
| Автор: Proxin 19.11.2010, 17:03 |
| Ищите низ MyDC. |
| Автор: keeper1 19.11.2010, 17:16 |
| Что значит низ? |
| Автор: Proxin 20.11.2010, 01:58 |
| Bottom либо Height, точно не помню. |
| Автор: keeper1 20.11.2010, 10:56 |
| А поподробнее? Как именно это надо сделать?Из ваших объяснений почти ничего неясно |
| Автор: keeper1 20.11.2010, 20:28 |
| Ну подскажите мне кто-нибудь по-нормальному,пожалуйста! |
| Автор: Dreamer_0x01 30.11.2010, 13:14 | ||
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 Прикладываю рисунок, поясняющий преобразование физических координат в экранные: ![]() |