Как вывести график на си
Программирование графических приложений- отдельная, большая тема, подробное изложение которой выходит за рамки поставленной нами задачи — ознакомления читателя с основами изучаемого языка. И тем не менее, на наш взгляд, описание возможностей любого языка программирования без хотя бы одного примера работы с графикой, пусть и самой простой, было бы неудовлетворительно. Для языка С существует много специальных графических библиотек функций, работающих с графикой. Для примера воспользуемся функциями, разработанными фирмой Borland для своего языка С/С++ версии 3.1. Приведем вариант программы, строящей на экране график функции Y=X*sin(X) в интервале от Х=0 до Х=10:
Программа на си для построения графика функции
В этой статье мы разберем программу на языке программирования си для построения графиков функций. В нашей программе будут отражаться система координат с делениями и подписями на них и будут строиться графики двух функций, который может сам задать пользователь. В программе на си для построения графика функции вводятся следующие константы X0 , Y0 — координаты центра координат k – масштаб одного деления на осях (сколько пикселов в одном делении) Опишем все функции и процедуры используемые в программе для построения графиков функций Подробно о задании функций и процедур в си int osx (float x) переводит реальную координату на оси ox в координату экрана int osy (float y) переводит реальную координату на оси oy в координату экрана float F1 ( float x ) и float F2 ( float x ) задают функции , графики которых мы будем строить void Point ( float x, float y, int color ) рисует точку графика функции на экране Перед построением графиков функций необходимо построить систему координат. Для построения системы координат используется процедура void Axes() В этой процедуре в цикле for рисуются линии меток делений на равном расстоянии друг от друга, который определяется масштабом одного деления k и выводятся значения делений с помощью двух операторов sprintf ( s, “%d”, i ); // записываем в строковую переменную число деления outtextxy ( xe-10, Y0+4, s ); // вывод числа Процедура grafik1() и grafik2() строят графики функций f1 и f2 В этих процедурах в цикле for для всех доступных значений x определяется координата y и точка графика строится с помощью процедуры point()
Пример работы программы построения графиков на си, функции пользователь может менять
Программа на си для построения графиков функций #include #include //графический режим #include // математические функции
//———————————————— const int X0 = 100, Y0 = 400;// координаты центра координат const float k = 15;// масштаб в точках одного деления на графике //—————————————— // перевод y в координаты экрана //—————————————— int osx (float x) < return X0+k*x; > //—————————————— //перевод y в координаты экрана //—————————————— int osy (float y) < return Y0-k*y; > // первая функция float F1 ( float x ) < return sqrt(2*x); > // вторая функция float F2 ( float x ) < return x*x/2; > // построение осей void Axes() < int i, xe,ye,y1; char s[10]; line ( X0, 0, X0, 599 ); // ось ox line ( 0, Y0, 799, Y0 ); // ось oy // метки на оси ox for ( i = 1; i <= (800-X0)/k; i ++ ) < xe = osx ( i ); line ( xe, Y0-2, xe, Y0+2 ); // рисуем деление разметки sprintf ( s, “%d”, i ); // записываем в строковую переменную число деления outtextxy ( xe-10, Y0+4, s ); // вывод числа > // метки на оси oy for ( i = 1; i <= (Y0)/k; i ++ ) < ye = osy( i+1 ); line ( X0-2, ye, X0+2, ye ); // рисуем деление sprintf ( s, “%d”,i ); // записываем в строковую переменную число деления outtextxy ( X0+10, ye+4, s ); // вывод числа > > // построение точки графика функции void Point ( float x, float y, int color ) < int xe, ye; xe = osx(x); ye = osy(y); if ( xe >= 0 && xe < 800 && ye >= 0 && ye < 600 ) putpixel(xe, ye, color); > // построение графика первой функции void grafik1() < float x, h, xmin, xmax; h = 1 / k; xmin = (-X0)/ k; xmax=(800-X0)/k; for ( x = xmin; x <= xmax; x += h ) < Point(x, F1(x), WHITE); > > // построение графика второй функции void grafik2() < float x, h, xmin, xmax; h = 1 / k; xmin = (-X0)/ k; xmax=(800-X0)/k; for ( x = xmin; x <= xmax; x += h ) < Point(x, F2(x), WHITE); > > // главная программа main () < initwindow ( 800, 600 ); // создать окно для графики Axes(); // построение и разметка осей координат grafik1(); // строим график первой функции grafik2(); // строим график второй функции getch(); // ждать нажатия на клавишу closegraph(); // закрыть окно для графики > Полезно почитать по теме построение графиков функций в программа си Графика в си Процедуры и функции в си
Б лок схема графической программы
Заданна функция float F(float x), необходимо на выбранном пользователем интервале построить ее график. Программа должна автоматически определять масштаб, содержать разметку, линейку для сканирования точек графика. Значения сканируемых точек должны писаться под графиком.
Этапы реализации
Программа реализуется в 4 этапа: Рисование разметки; Нахождение минимума и максимума функции; Оцифровка; Вывод графика; и Сканирование значений точек.
Рисование разметки
Для рисования разметки рекомендуется воспользоваться стилем линий DOTTED_LINE. После завершения рисования, не забудьте вернуться к стилю SOLID_LINE. Рисовать удобнее функцией line(. ) выводимой в цикле.
рограмма вывода графиков
Нахождение минимума и максимума функции
еобходимо построить график на интервале
t0..tmax. Кол-во точек N. Шаг между точками
dt=(tmax-t0)/N. float t0,tmax,dt; int N;
В начале считаем что макс.=мин.= значение в
Просматриваем все остальные точки графика.
Каждая точка сравнивается
с макс. значение, если
больше то макс. берется
t0+i*dt — значение по
горизонтали i точки.
функции в i точки.
Для вывода цифр около линий разметки необходимо использовать функцию outtextxy(. ), но предварительно число необходимо записать в строку, т.к. outtextxy(. ) работает только со строками. Для этого удобнее всего пользоваться функцией sprintf(<Строка>,<«Текст, метки форматов»,[<Переменные>]>). Эта функция аналогична printf(. ), но вывод происходит не на экран, а в строку.
При выводе на экран, необходимо помнить что координаты переданные в функцию outtextxy(. ), относятся к левому верхнему углу строки. Чтобы строка была напротив (под) линей разметки, ее необходимо сдвинуть. Полезно учесть размер символа (функции textwidth(. ) и textheight(..).
Вывод графика
Для вывода графика рекомендуется ввести целые переменные: x1,y1,x2,y2 — координаты точек, WX1,WY1,WX2,WY2 — координаты окна вывода. Алгоритм рисования графика следующий.
Сложность заключается только в пересчете вертикальных координат. Обычно они направленны снизу вверх, а у машины наоборот.
Сканирование значений точек
Под сканированием точек в задании понимается вертикальная линия перемещающаяся по графику, и выводимые под графиком значения аргумента и функции. Как организовать движение по клавишам и вывод числовых значений в графики уже рассматривалось выше.
Новое: Изображение линии, с последующим восстановлением изображеного под ней. Это рекомендуется реализовать используя режим инверсии экрана. В Си существует несколько способов рисования линий и прямоугольников. Первый режим COPY_PUT, указанные объекты рисуются цветом установленным в setcolor(. ). Другие режимы позволяют рисовать комбинацией текущего цвета и цвета точек находящихся под рисунком. Удобнее всего использовать режим XOR_PUT. Повторно проведя линию того же цвета, возвращаемся к исходным цветам XOR(XOR(X))==X.
Установку режима осуществляет функция setwritemode(<Режим>). Установленный режим действует до установки нового. По умолчанию используется режим COPY_PUT.
Для того чтобы не забыть отключить режим инверсии, удобнее вынести все это в отдельную функцию, которая будет и стирать, и рисовать линю курсора.
void PutLine(int x,int y1,int y2)
setcolor(RED) ; /* Инверсия др. цветом даст др. резулт. */
/* Линия будет рисоваться не цветом RED */
line(x,y1,x,y2) ; /* Линия вертикальная x1=x2=x */
setwritemode(COPY_PUT) ; /* Иначе и все остальное будет с инверсией цветов. */
Вывод графика функции на консоль
Как реализовать вывод графика в консоль с использованием массивов? Как реализовать вывод графика в консоль с помощью массивов? #include #include.
Вывод графика функции Здравствуйте. Помогите пожалуйста создать программу вывода на форме графиков функции. Должно быть.
Вывод графика функции построить программу, которая позволяет решать задачу одномерной оптимизации (для написания.
Сообщение было отмечено sice111 как решение
Решение
Тестировалась на Tiny C Compiler
Вывод графика заданной функции Разработать с использованием процедур и функций из стандартного модуля Graph программу.



