Uploaded by Shona D

компьютерная графика Нарисовать сетку заданного размера ячейки в пикселях, с заданным количеством ячеек по осям X и Y.

advertisement
Министерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное
образовательное учреждение высшего образования
«НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ
УНИВЕРСИТЕТ»
Кафедра систем сбора и обработки данных
Лабораторная работа №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);
//Рисуем окружность с заданными параметрами внутри ячейки сетки
}
Запуск программы.
Download