- •Московский институт электронной техники
- •Программа
- •Контекст устройства
- •Драйвер устройства
- •Устройство вывода
- •Получить контекст устройства
- •Пример программы построения графика в dos
- •Программирование графики в Windows.
- •Пример программы построения графика в Windows
- •Задание к выполнению лабораторной работы.
Пример программы построения графика в dos
Приведем код программы строящей график функции . Пусть код программы находится в файлеGraphDos.cpp
//строим график функции в DOS
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include <process.h>
#include <math.h>
//размеры поля вывода в мировых координатах
double xLeft, xRight, yBottom, yTop;
//размеры поля вывода в экранных координатах
int nLeft, nRight, mBottom, mTop;
//переход от xк пикселюn
inline int xn(double x){
return (x - xLeft)/(xRight - xLeft)*(nRight - nLeft) + nLeft; }
//переход от yк пикселюm
inline int ym(double y){
return (y - yBottom)/(yTop - yBottom)*(mTop - mBottom) + mBottom; }
//создаем окно вывода
void CreatWindow()
{
int winLeft = 50, winRight = 550, winBottom = 430, winTop = 100;
setfillstyle(SOLID_FILL,3);
bar(winLeft, winTop, winRight, winBottom);
setcolor(12);
outtextxy(winLeft+5, winTop+7, "Korneev V");
setcolor(15);
outtextxy(winLeft+150, winTop+7, "Graphics to DOS");
setcolor(15);
rectangle(winLeft+3, winTop+17, winRight-3, winBottom-3);
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(winLeft+5, winTop+19, winRight-5, winBottom-5);
setviewport(winLeft+5, winTop+19, winRight-5, winBottom-5,1);
}
void main()
{
//размеры поля вывода в мировых и экранных координатах
xLeft = -2; xRight = 10; yBottom = -2; yTop = 2;
nLeft = 100; nRight = 350; mBottom = 250; mTop = 50;
//создаем массивы точек для аргумента x и функции y=sin(x)
const int N = 50;
double corX[N], corY[N];
double x, y, dx = (xRight - xLeft)/(N-1);
for(int i=0; i<N; i++)
{
x = xLeft + dx*i; y = sin(x);
corX[i] = x; corY[i] = y;
}
//инициализация графической системы
int mode, res, driver = DETECT;
initgraph(&driver, &mode,"c:\\borlandc\\bgi");
if((res = graphresult()) != grOk) {
printf("\nGraphics error: %s\n", grapherrormsg(res));
exit(1); }
//создаем окно вывода
CreatWindow();
//оформляем поле вывода
//выбор кисти: 1) стиль - сплошной
// 2) цвет закраски - синий
setfillstyle(SOLID_FILL,BLUE);
bar(nLeft,mBottom,nRight,mTop);
//выбор пера: 1) стиль - сплошной
// 2) толщина линий - 3 пикселя
// 3) цвет линий - желтый
setlinestyle(SOLID_LINE,0,3);
setcolor(YELLOW);
rectangle(nLeft,mBottom,nRight,mTop);
//рисуем координатные оси
//выбор пера: 1) стиль - сплошной
// 2) толщина линий - 1 пикселя
// 3) цвет линий - ярко-голубой
setlinestyle(SOLID_LINE,0,1);
setcolor(LIGHTCYAN);
int nb, ne, mb, me;
nb = xn(xLeft); mb = ym(0);
ne = xn(xRight); me = ym(0);
line(nb,mb,ne,me);
nb = xn(0); mb = ym(yBottom);
ne = xn(0); me = ym(yTop);
line(nb,mb,ne,me);
//название графика и осей
setcolor(15);
outtextxy((nLeft+nRight)/2-30, mTop+25, "Y = sin(X)");
outtextxy(nLeft-35, (mBottom+mTop)/2, "Y");
outtextxy((nLeft+nRight)/2, mBottom+25, "X");
//выводим числа вдоль осей
char ss[10];
sprintf(ss,"%6.1lf",xLeft);
outtextxy(nLeft-30,mBottom+7,ss);
sprintf(ss,"%6.1lf",xRight);
outtextxy(nRight-30,mBottom+7,ss);
sprintf(ss,"%6.1lf",yBottom);
outtextxy(nLeft-55,mBottom-7,ss);
sprintf(ss,"%6.1lf",yTop);
outtextxy(nLeft-55,mTop+3,ss);
//рисуем график по двум массивам
setcolor(12);
nb = xn(corX[0]); mb = ym(corY[0]);
moveto(nb,mb);
for( i=1; i<N; i++)
{
nb = xn(corX[i]); mb = ym(corY[i]);
lineto(nb,mb);
}
getch();
//выключение графической системы
closegraph();
}
После компиляции и компоновки получаем исполняемый файл GraphDos.exe . Запускаем программу. На Рис.4 приведен результат работы программы
Рис.4