![]() |
Графики в турбо С или С++ 3.1
У кого есть исходники прог для рисования графиков любых функций. Выложите пожалуйста
|
Ruffo
Ну у меня допустим есть. Но давайте сначала разберемся, что у Вас конкретно не получается. Задача-то элементарно проста. Прямо по шагам: 1. Инициализация графического режима. 2. Вычисление констант для преобразования относительных значений x, y (в функции) в абсолютные x, y (на экране). 3. Отображение координатной сетки и различных дополнительных элементов (засечек, подписей, ...). 4. Построение графика путем вычисления для каждого x ? [min_x; max_x] своего y по заданной функции с учетом некоторого шага step (задающего в итоге точность построения графика). Полученные относительные значения преобразуются в абсолютные и результат выводится на экран в виде линии или точки (смотря какой график нужен). 5. Ожидание действий пользователя и закрытие графического режима. Если же Вам программирование совсем не нужно ине интересно, то добро пожаловать к Гуглю. Там уже есть готовые решения, как платные, так и бесплатные. |
1. и 5. получается все остальное нет :(
Новый препод дал задание на практику (ни лекций ничего не проводил) и уматал в отпуск ... Мне необходим хотябы образец построения какой нибудь функции (т.к. мне задана конкретная функция) может разобрав пример смогу нарисовать свою функцию ... буду очень благодарен если кто нибудь запостит или отправит на мыло в@профиле.оно |
Вложений: 1
Ruffo
Так как задана кокретная функция, то задача еще больше упрощается: не надо писать парсер для произвольной функции, которую пользователь вводит уже во время работы программы. Рассмотрим шаг №2: у меня он реализовался в таком виде Код:
#define MIN_COORD_X -8 // минимальный Х, для которого строится график Таким образом вычисляется месторасположение точки (x;y) на экране - это будет пиксель с координатами (x*rel_x+add_x; y*rel_y+add_y). rel_x и rel_y задают масштаб преобразования из единиц в пиксели (вообще их надо было бы делать типа double, но обычно такой точности и не требуется). Теперь переходим к шагу 3: Код:
if (MAX_Y * MIN_Y < 0) Шаг 4: собственно постройка графика Код:
double i = MIN_COORD_X; Код:
double f(double x) Надеюсь, хоть что-то объяснил. Здесь представлен только скелет программы. Все необходимые навороты добавить труда не составит. Внизу он же прикреплен, только уже в более-менее рабочем состоянии :) (с наворотами) и без комментариев. Единственное, чего тут потенциально не хватает - это обработчика исключительных ситуаций (при вычислении значения функции)... Текст программы исправлен (14.07.2005) |
а у меня вопрос наоборот связан с инициализацией графического режима- как это делается?
и еще принципиальный вопрос-как это связано с библиотекой MFC? это еще один способ работы с графикой или есть важные отличия инициализации от работы с классами Cview. я только начинаю изучать графические возможности с++ поэтому пока с этими классами не работал. |
Turman
Цитата:
Код:
// Графический драйвер Цитата:
1. Работаем под realmode ДОС'ом 2. TC и TC++ - продукты Borland'a |
ага понятно.
а на visual c++ это пройдет? |
Что "это" ?!
ОС win32 (или у Вас vc++ под ДОС?) и так вроде бы работает в графическом режиме. И имеет собственные наборы средств для "рисования" - библиотеки gdi, opengl, directx. |
А не хотите обсудить построение графика с поиском экстремумов функции? Или с этим не сюда?
|
penykov
Цитата:
|
При построении графика, когда берётся каждое k-е значении функции можно запросто пропустить короткие всплески этой функции. Интересует быстрый алгоритм "правильного" рисования.
В моём случае функции нет, а есть оцифрованный сигнал, нужно его корректно отобразить (а по сути промасштабировать по x). Решение: Предположим, что размер данных (сигнала) M, ширина экрана K (для простоты K<M). Максимальное значение амплитуды пусть будет равно высоте экрана. Сигнал условно разбивается на N частей, N=M/K. Теперь на каждом из N участков ищется максимум и минимум сигнала. строится отрезок с координатами (x,min;x,max). Недостатком метода является то, что если на соседних участках минимум одного участка больше максимума другого и наоборот, то график получается непрерывным. Приходится после каждого участка проверять это условие и корректировать max или min. Какие ещё есть методы? |
Время: 16:36. |
Время: 16:36.
© OSzone.net 2001-