
11.3 Пример программы для символьного графика
// grasim1.cpp
#include <fstream.h>
#include <conio.h> // for getch
#include <math.h>
#include <iomanip.h>
void graphN ( int N, float x [ ], float y [ ] );
Int main( )
{ float x[50], y[50]; int N=25;
ofstream ff (“ag1.txt”);
for (int k = 0; k < N; k++) { x[k] = .3*k; y[k] = sin(x[k] );
ff << k << " \t " << x[k] << ' \t ' << y[k] <<endl; }
graphN (N, x, y); getch();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void
graphN ( int N, float x[ ], float y[ ] )
{ char v= '|'; int kx = 20, ky=20; char Mas[20][20];
int k, i ,j; float xmin, xmax, ymin, ymax, yi;
for(i=0; i<ky; i++) for (j = 0; j<kx; j++) Mas[i][j]=' '; //п1
xmin = xmax = x[0]; ymin = ymax = y[0]; //п2
for(k=1; k<N; k++) {xmin = min (xmin,x[k]); xmax = max (xmax,x[k]);
ymin = min (ymin,y[k]); ymax = max (ymax,y[k]); } ;
float stepx = (xmax-xmin) / (kx-1); float stepy = (ymax-ymin) / (ky-1);
// if(stepx<1e-10 || stepy < 1e-10){ cout<< " y(x)=const => End";
// getch( ); return;}
for (i=0; i<ky; i++) { Mas[i][0] = v; Mas[i][ky-1]= v;} //п3
for (k=0; k<N; k++) { i = ( ymax-y[k]) / stepy +0.5;
j = (x[k]- xmin ) / stepx +0.5; Mas[i][j]='*'; } //п4
cout<<setprecision(3);
for(i=0; i<ky; i++) { yi = ymax-stepy*i; cout<<endl<<setw(11) << yi;
for(j = 0; j<kx; j++) cout<<" "<<Mas[i][j]; } //п5
cout<< endl << setw(15) << xmin <<setw(57)<< xmax <<endl; } //п6
11.4 Построение графика в графическом режиме
В графическом режиме резко увеличивается количество точек, т.к. работа с
пикселами позволяет использовать, например, 200 строк и 600 столбцов
вместо 20 строк и 20 столбцов символьного графика. При этом рис. 11.1 и
алгоритм построения графика почти не изменяются, но теперь каждая точка
рис.11.1 соответствует пикселу. Матрицу Mаs можно не формировать, т.к.
возможен вывод каждого отдельного пиксела в любом порядке с помощью
стандартных графических подпрограмм. Следовательно, основное отличие двух
подпрограмм построения графика заключается в выводе: в символьном графике
для его вывода необходимо формировать строку, а в графическом режиме можно
выводить любой пиксел.
Рассмотрим основные этапы графического программирования на примере для
задачи раздела 11.2. Пример программы дан в разделе 11.6.
Используется библиотека graphics.lib.
1. Составление функции main ( если необходимо, и других функций) для
вычисления двух массивов x[k], y[k], определящих координаты N точек, т.е.
k=1,2,.., N. Отметим, что значения N для графического режима могут быть
резко увеличены по сравнению со случаем символьного графика. После
формирования массивов x, y можно вызывать функцию построения
графика : gragci ( N, x, y ).
2. Подключение необходимых заголовочных файлов, в частности, файла
graphics.h
3. Установка видеорежима в соответствии с особенностями конкретного
компьютера. Для этого вызывается функция initgraph, которой передается
параметр DETECT и путь к папке с графическими драйверами. Значение
DETECT равно 0, и при этом определение типа видеоадаптера и выбор
соответствующего драйвера происходят автоматически. Установленный
режим характеризует параметр mode в initgraph.
4. Вызов в тексте подпрограмм всех необходимых графических функций,
т.е. непосредственная работа с графикой. В рассматриваемом примере вызываются
функции rectangle, setcolor, moveto, lineto, line, outtextxy.
5. Компиляция, компоновка, выполнение программы. Результатом является
график на экране.
Программа построения графика будет рассмотрена на семинаре, а также при
выполнении лабораторной работы следующего семестра.