Программа на си для построения графика функции
В этой статье мы разберем программу на языке программирования си для построения графиков функций. В нашей программе будут отражаться система координат с делениями и подписями на них и будут строиться графики двух функций, который может сам задать пользователь.
В программе на си для построения графика функции вводятся следующие константы
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 <stdio.h>
#include <graphics.h> //графический режим
#include <math.h> // математические функции
//————————————————
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(); // закрыть окно для графики
>
Полезно почитать по теме построение графиков функций в программа си
Графика в си
Процедуры и функции в си
Построение графиков с использованием модуля graphics.H
Для изображения на экране графиков функций, рисунков и другой графической информации в языке “Borland C” и “C++” предусмотрен стандартный модуль “Graphics”. Подпрограммы модуля “Graphics” управляют экраном в графическом режиме и становятся доступными в программе после указания его имени в предложении USES. Подпрограммы, используемые для построения графиков, рассматриваются в описании модуля “Graphics”.
В графическом режиме информация отображается на экране в виде светящихся точек, называемых пикселями. Максимальное количество точек на экране, отображаемых по горизонтали и вертикали называется разрешением. Разрешение определяется установленным графическим режимом (возможностями компьютера). При желании графический режим можно поменять и сменить его на менее высокий(режем выше чем позволяет компъютер установить нельзя). Примеры графических режимов С.М. ниже.
Система координат экрана в графическом режиме показана на (рис1). Начало системы координат находится в левом верхнем углу экрана и совпадает с точкой, имеющей координаты (0,0). Ось OX направлена слева направо, а ось OY – сверху вниз.
График функции может изображаться на всем экране, либо в прямоугольной области, занимающей часть экрана (Рис.1). В исходной системе координат, которая соответствует функции
, ось oxнаправлена слева направо, а ось oy снизу вверх. В этой системе координат размеры области, занимаемой графиком, определяется по горизонтали диапазоном изменения аргумента x (например,
), а по вертикали – минимальным Fmin и максимальным Fmax значениями функции y, которые она принимает при
.
На экране область, занимаемая графиком (Рис.1), представляется прямоугольником с координатами верхнего левого угла (k,i) и координатами нижнего правого угла (l,j).
Связь координат (x,y) пиксели, представляющего на экране точку (x, F(x)) графика , задается следующими формулами:
где a – масштабный коффициент, b – положение оси OX на экране.
Значения величин a и b определяются из системы уравнений, полученной из формулы (2):
(3)
Решив эту систему, найдем a и b:
b=j-aFmin=j-Fmin(i-j)/(Fmax-Fmin) (5)
Положение на экране осей OX и OY исходной системы координат, соответствующей функции , задается уравнениями:
которые получаются из формулы (1) и (2) при F(x)=0 и x=0 (Рис.1)
График функции sin(x)
График функции y=sin(x) симметричен относительно горизонтальной оси, поэтому должен быть построен в окне со смещением относительно левого верхнего угла окна, принятого за начало отсчета.
Координата X меняется в пределах [0;7] , координата Y — [-1;1] . Величины MAX_X и MAX_Y представляют собой область допустимых значений по осям координат:
- MAX_X = maxX — minX = 7 ;
- MAX_Y = maxY — minY = 2 .
Смещение графика функции представляет собой положение первой точки относительно начала отсчета левого верхнего угла:
- смещение по оси X : OffsetX = minX*width/MAX_X = 0 ;
- смещение по оси Y : OffsetY = maxY *height/MAX_Y
Значение minX=0 представляет собой минимальное значение координаты x из области допустимых значений.
Значение maxY=1 представляет собой максимальное значение координаты y из области допустимых значений. Рассматривается именно максимальное значение, поскольку за начало отсчета принят левый верхний угол окна, и координата y увеличивается по направлению вниз.
Для того чтобы график функции разместился в окне необходимо рассчитать масштабные коэффициенты по осям. Масштабный коэффициент представляет собой отношение размера окна к области допустимых значений функции.
- масштабный коэффициент X : ScaleX = width / MAX_X ;
- масштабный коэффициент Y : ScaleY = height / MAX_Y .
Вычисление координат следующей точки (x;y) графика в окне будет осуществляться по формулам:
- координата X=OffsetX + x*ScaleX ;
- координата Y=OffsetY + y*ScaleY ,
где (x;y) — координаты точки, полученные из функции y=sin(x) .
Реализация на C++
Результат выполнения
Примечание : Для корректной сборки приложения используется многобайтовая кодировка.
Как строить графики в си
Программирование графических приложений- отдельная, большая тема, подробное изложение которой выходит за рамки поставленной нами задачи — ознакомления читателя с основами изучаемого языка. И тем не менее, на наш взгляд, описание возможностей любого языка программирования без хотя бы одного примера работы с графикой, пусть и самой простой, было бы неудовлетворительно.
Для языка С существует много специальных графических библиотек функций, работающих с графикой. Для примера воспользуемся функциями, разработанными фирмой Borland для своего языка С/С++ версии 3.1. Приведем вариант программы, строящей на экране график функции Y=X*sin(X) в интервале от Х=0 до Х=10: