- •Построение графиков с использованием модуля graphics.H
- •Теоретические сведения
- •2. Описание модуля graphics.H
- •Функция cleardevice() очищает весь экран, устанавливает текущей точкой левый верхний угол экрана, но оставляет неизменными все установки графического экрана: стиль линии, текущий цвет и т.Д.
- •Пример построения графиков
- •Написать программу, выводящую на экран график функции
- •4.Требования к работе.
- •5.Контрольные вопросы
- •6. Варианты заданий
Функция cleardevice() очищает весь экран, устанавливает текущей точкой левый верхний угол экрана, но оставляет неизменными все установки графического экрана: стиль линии, текущий цвет и т.Д.
Функция clearviewport() очищает текущее окно и устанавливает текущую точку в левый верхний угол.
Наконец, для осуществления вывода текста в графическом режиме на экран используются функции:
outtext() - выводит строку на экран с текущей позиции
outtextxy() - выводит строку на экран с заданной позиции
settextjustify() - устанавливает режим выравнивания текста
setusercharsize() - устанавливает шрифт, стиль и коэффициент
увеличения текста
textheight() - возвращает высоту строки в пикселях
textwith() - возвращает ширину строки в пикселях.
Пример построения графиков
Написать программу, выводящую на экран график функции
F(x)=sin(x) + 1/sin(x) на интервале (-5,5)
Текст программы.
#include <stdio.h>
#include <graphics.h>
#include <conio.h>
#include <math.h>
#include <process.h>
float calculate_fx(float x)
{
if( sin(x) != 0)
return sin(x) + 1/(sin(x)) ;
else
return 0;
}
float calc_min(float x1, float x2,float delta_x)
{
float min = calculate_fx(x1);
for(float xx = x1;xx< x2;xx+=delta_x)
{
float current = calculate_fx(xx);
if(current < min )
min = current;
}
return min;
}
float calc_max(float x1, float x2,float delta_x)
{
float max = calculate_fx(x1);
for(float xx = x1;xx< x2;xx+=delta_x)
{
float current = calculate_fx(xx);
if(current > max )
max = current;
}
return max;
}
void main()
{
// int x1,x2,b;
// int y1,y2;
// float dx,a;
// double x_1,x_2;
// float Fmin,Fmax;
int gdriver=DETECT,gmode,error;
initgraph (&gdriver,&gmode,"e:\\borlandc\\bgi");
error=graphresult();
if (error != grOk)
{printf ("Graphics error: %s\n",grapherrormsg(error));
printf ("Press any key to halt:");
getch();
exit(1);
}
else
{
float y_scale;
float delta_x,x_min,x_max,F_min,F_max;
char out[256],out1[256],o2[256],o3[256];
//Fmax=x_2*pow(x_2,3)+2*pow(x_2,2)-0.2;
//Fmin=x_1*pow(x_1,3)+2*pow(x_1,2)-0.2;
setbkcolor(1);
setcolor(WHITE);
// line(k,b,l,b);
line(0,240,640,240);
line(320,10,320,480);
outtextxy(300,0,"y=F(x)");
x_min = -5; // minumum of x
x_max = 5; // maximum of x
// calculate delta x
delta_x = (fabs(x_max) + fabs(x_min)) / 640;
// calculate max and min F(X)
F_min = calc_min(x_min,x_max,delta_x);
F_max = calc_max(x_min,x_max,delta_x);
// calculate y scale
if ( fabs(F_max) > fabs(F_min) )
{
y_scale = F_max*2/480;
sprintf(out,"%f",fabs(F_max));
sprintf(out1,"%f",-fabs(F_max));
}
else
{
y_scale = F_min*2/480;
sprintf(out,"%f",fabs(F_min));
sprintf(out1,"%f",-fabs(F_max));
}
sprintf(o2,"%f",fabs(x_max));
sprintf(o3,"%f",-fabs(x_min));
outtextxy(340,10,out);
outtextxy(340,470,out1);
outtextxy(10,210,o2);
outtextxy(600,210,o3);
// plot f(x)
for(float st=x_min,x=0;st<x_max;st+=delta_x,x++)
{
float yy =calculate_fx(st)/y_scale;
int y;
y = - yy;
// if(y > 0 )
putpixel(x,y+240,RED);
}
getch();
closegraph;
}
}
Пояснения к программе
Данная программа вычисляет максимальное и минимальное значение функции на данном отрезке (-5,5), после чего задает соответствующий масштаб по оси oy. Графическое разрешение экрана задаем 640*480, поэтому нам необходимо вычислить ровно 480 значений функции. После вычисления программа окрашивает фон и в вычисленном масштабе по пикселю выводит значения функции на интервале. Таким образом получаем график функцииF(x)=sin(x) + 1/sin(x).