Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛАБ 3 / LAB-3(var 3) UTF-8

.cpp
Скачиваний:
27
Добавлен:
04.11.2020
Размер:
5.12 Кб
Скачать
//  работа с видеосистемой в графическом режиме
#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