Добавил:
anersisyan1999
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:ЛАБ 3 / LAB-3(var 3) UTF-8
.cpp// работа с видеосистемой в графическом режиме
#include "conio.h" // clrscr
#include "math.h" // M_PI, sin, cos, sqrt, pow
#include "dos.h" // delay
#include "graphics.h" // graph
#include "iostream.h" // printf, scanf3
int Xmax, Ymax, X0, X1, Y0, Y1, DRIVER, MODE, NomedDots[1000];
float Result[1000], Rmax=0.;
// Формирование массива значений отображаемой функции
void counting(int N)
{
float x, dx=17.*M_PI/N;
int i;
for (i=0, x=3*M_PI/2.; i<N; i++, x+=dx)
{
Result[i]=(float)(pow(sin(x/4),2)+sqrt(x)); // сама функция
if(Rmax<Result[i]) {
Rmax=Result[i];
}
}
}
void main()
{
int N;
clrscr(); // Очистка экрана
detectgraph(&DRIVER,&MODE); // Открыли графичесий режим
/* что такое detectgraph(&DRIVER,&MODE);
detectgraph для определения типа видеоадаптера, подходящего графического драйвера
и графического режима максимального разрешения (максимального режима)
для активного видеоадаптера системы. Значения для драйвера и
максимального режима возвращаются в ячейках памяти, на которые
указывают DRIVER и MODE
*/
initgraph(&DRIVER,&MODE,"..//BORLANDC//BGI"); // Расположение драйверов BGI
/*
initgraph инициализирует графическую систему, загружая .BGI-драйвер,
определяемый указателем DRIVER, и устанавливая видеоадаптер
в графический режим, задаваемый указателем MODE
*/
Xmax=getmaxx();
Ymax=getmaxy(); // Установили размеры экрана
X0=40; Y0=Ymax-30; // Левый нижний угол графика
X1=Xmax-30; Y1=30; // Правый верхний угол графика
N = X1-X0; // Количество точек по оси X
char Ox[9][6] = {"3Pi/2", "3Pi", "5Pi", "7Pi", "9Pi", "11Pi", "13Pi", "15Pi", "17Pi"};
setlinestyle(0,1,1);
//setlinestyle(0,1,3); // параметры линий
outtextxy(200, 400, "f(x)=sin^2(x/4)+sqrt(x) on 3*P/2 to 17P");
counting(N); // Вычислили значения функции
for (int i=0;i<N;i++) { // Нормируем все значения функции
NomedDots[i]=Y0-(int)(Result[i]/Rmax*(float)(Y0-Y1));
}
setlinestyle(0,1,2);
//setlinestyle(0,1,1); // Рисуем координатные оси
line(X0, Y0, X0, Y1-20); // y
line(X0, Y0, X1+2, Y0); // x
outtextxy(X0+5,Y1-20,"f(x)"); // Помечаем оси
outtextxy(X1+3,Y0-10,"x");
outtextxy(X0-10, Y0-10, "0");
outtextxy(X0-10, Y1-20, "1");
for (int j=0; j<10; j++) //Рисуем метки и подписи на оси Х
{
line(X0+(int)(N/8)*j+4, Y0-3, X0+(int)(N/8)*j+4, Y0+3); //Метки
outtextxy(X0+(int)(N/8)*j-15, Y0+5, Ox[j]); //Подписи
};
// что твориться в строке метки? X0+(int)(N/8)*i -- берем начало координат и к нему плюсуем длину координат х
// разделенную на 8 частей (потому что меток 8) умножаем на итерацию (каждый раз ровно на одно и то
// же отрезок двигаемся вперед) т.к i = 1,2,3,....9 // а (int) - это округляем число пикселей до целого
// все это получем координату по х, а за у взяли уровень х и +-3 пикселя вверх и вниз
// в итоге у нас две пары координат (х,у) по которым чертим линию
// и так 9 раз (начинаем с 1, потому что 0 - это ось у, из за того что начинаем с 1, заканчиваем на 10 а не 9;
// в строке Подписи
// берем ту же длину (длину каждого отрезка), идем обратно 15 пикселей по х, спускемся вниз на 5 пикселей по у
// и вставляем очередной подпись из массива Ox //"3Pi/2",....,"17Pi" //
// Рисуем график функции
for (int k=0; k<N; k++)
{
putpixel(k+X0,NomedDots[k],14); // 12 - это цвEт линии графика
delay(20);
}
outtextxy (200, 50, "Maximum of F(x) is 0.92");
getch(); // Ожидаем нажатия клавиши...
closegraph(); // Закрываем графичесий режим
getch();
}
Соседние файлы в папке ЛАБ 3