Как строить графики в си
Перейти к содержимому

Как строить графики в си

  • автор:

Программа на си для построения графика функции

В этой статье мы разберем программу на языке программирования си для построения графиков функций. В нашей программе будут отражаться система координат с делениями и подписями на них и будут строиться графики двух функций, который может сам задать пользователь.
В программе на си для построения графика функции вводятся следующие константы
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++

График функции sin(x)

Результат выполнения

Примечание : Для корректной сборки приложения используется многобайтовая кодировка.

Как строить графики в си

Программирование графических приложений- отдельная, большая тема, подробное изложение которой выходит за рамки поставленной нами задачи — ознакомления читателя с основами изучаемого языка. И тем не менее, на наш взгляд, описание возможностей любого языка программирования без хотя бы одного примера работы с графикой, пусть и самой простой, было бы неудовлетворительно.
Для языка С существует много специальных графических библиотек функций, работающих с графикой. Для примера воспользуемся функциями, разработанными фирмой Borland для своего языка С/С++ версии 3.1. Приведем вариант программы, строящей на экране график функции Y=X*sin(X) в интервале от Х=0 до Х=10:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *