Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования «НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ» Кафедра систем сбора и обработки данных Лабораторная работа №1 По дисциплине Компьютерная графика Факультет: АВТ Группа: АО-02 Студент: Дамбыл Ш.Ю Преподаватель: Кухто Андрей Вадимович Новосибирск 2021 Цель: Освоить графические примитивы в среде Windows, используя языки программирования C++ или C#. Задание 1. Нарисовать сетку заданного размера ячейки в пикселях, с заданным количеством ячеек по осям X и Y. 2. В заданной ячейке сетки нарисовать окружность или квадрат, и заполнить их каким-либо цветом. Логическое начало координат у сетки - нижний левый угол. 3. Оформить процедуры отрисовки сетки и точки в виде отдельных подпрограмм. Решение #include #include #include #include <iostream> <Windows.h> <windowsx.h> <conio.h> struct Point { int x; int y; }; //координаты х и у struct data { int height = 14; int width = 15; int size = 30; } info; //Ширина, высота клеток, размер ячеек сетки void DrawGrid(HDC* hdc); //Определение функции рисования сетки void DrawEllipse(HDC* hdc, Point p, data info); //Определение функции рисования окружности void main() { Point p1; //Точка, в которой мы будем рисовать круг HWND hwnd = GetConsoleWindow(); HDC hdc = GetDC(hwnd); // получаем контекст отображения HPEN whitePen = GetStockPen(WHITE_PEN); //создание перо для рисование сетки HBRUSH blackBrush = GetStockBrush(BLACK_BRUSH); //создание кисти SelectBrush(hdc, blackBrush); //Выбор черную кисть FloodFill(hdc, 0, 0, RGB(0, 0, 1));//Закрашиваем окно черным цветом SelectPen(hdc, whitePen); //Выбираем свет пера, которым будем рисовать сетку std::cin >> p1.x >> p1.y; //ввод координат сетки, в которых будет нарисован круг system("cls"); DrawGrid(&hdc); //Рисуем сетку DrawEllipse(&hdc, p1, info); //Ресуем круг ReleaseDC(hwnd, hdc); //Освобождаем контекст DC _getch(); //Функция, которая ожидает нажатие клавиши, для продолжения работы программы } void DrawGrid(HDC* hdc) { int x, y, x1, y1; //Устанавливаем начальное положение пера x = y = x1 = y1 = 0; //Рисуем линии по горизонтали for (int i = 0; i <= (info.height); i++) { MoveToEx(*hdc, x, y, NULL); //Обновляем текущую позицию пера LineTo(*hdc, x + (info.width * info.size), y); //Рисуем линию y += (info.size); //Сдвигаемся вниз по координате у } //Рисуем линии по вертикали for (int j = 0; j <= info.width; j++) { MoveToEx(*hdc, x1, y1, NULL); //Обновляем текущую позицию пера LineTo(*hdc, x1, y1 + (info.height * info.size)); //Рисуем линию x1 += (info.size); //Сдвигаемся вправо по координате х } } void DrawEllipse(HDC* hdc, Point p, data info) { HBRUSH brush = GetStockBrush(GRAY_BRUSH); //создание кисти для зарисовки круга SelectBrush(*hdc, brush); //Выбор кисти Ellipse(*hdc, (p.x - 1) * info.size, (p.y - 1) * info.size, p.x * info.size, p.y * info.size); //Рисуем окружность с заданными параметрами внутри ячейки сетки } Запуск программы.