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

Курсовая

.docx
Скачиваний:
0
Добавлен:
02.12.2024
Размер:
593.79 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра информационной безопасности

Курсовая РАБОТА

по дисциплине «Алгоритмы и структуры данных»

Тема: Алгоритмы повышенной сложности

Студент гр. 1363

Владимиров П.А.

Преподаватель

Беляев А.В.

Санкт-Петербург

2022

ЗАДАНИЕ на курсовую работу

Студент Владимиров П.А.

Группа 1363

Тема работы: Алгоритм заливки замкнутой области (L1)

Исходные данные:

Алгоритм заливки замкнутой области (L1)

Реализовать (обучающую) программу:

 предлагающую пользователю с помощью мыши начертить кривую или ломаную линию с самопересечениями и выбрать точку начала заливки

 проверяющую замкнутость нарисованной области относительно выбранной точки начала заливки

 в случае положительного результата проверки заполняющую область каким-либо цветом.

Скорость отображения процесса заливки должна позволять понять принцип работы используемого алгоритма. В случае если выбранный алгоритм заливки подразумевает точки разного типа, рекомендуется отображать их разным цветом. Одновременно на экране в текстовом поле должно быть размещено краткое описание алгоритма.

Содержание пояснительной записки:

Описание реализуемых алгоритмов, рисование, заливка, ключевые элементы исходного кода программы, инструкции по исполнению, результаты запуска программы, заключение.

Предполагаемый объем пояснительной записки:

Не менее 5 страниц.

Дата выдачи задания: 05.11.2022

Дата сдачи реферата: 10.12.2022

Дата защиты реферата: 10.12.2022

Студент

Владимиров П.А.

Преподаватель

Беляев А.В.

содержание

1.

Описание реализуемых алгоритмов

5

1.1.

Рисование

5

1.2.

Заливка

5

2.

Ключевые элементы исходного кода программы

7

Инструкции по исполнению

9

Результаты запуска программы

10

Заключение

14

ОПИСАНИЕ РЕАЛИЗУЕМых АЛГОРИТМов

Функция рисования:

Прежде чем рисовать нам надо создать экземпляр класса Bitmap для того, чтобы картинка состояла из пикселей.

Для рисования мы создаем объект класса Pen. Данный объект используется для рисования прямых и кривых линий. Дальше мы создаем объект класса Graphics для того, чтобы использовать методы для рисования объектов. Дальше мы проверяем нажата ли левая кнопка мыши. Если кнопка нажата, то мы используем метод DrawLine(Pen, int 32, int 32, int 32, int 32). Он проводит линию, соединяющую две точки, задаваемые парой координат. В нашем случае первые два аргумента – это старые точки, а оставшиеся два аргумента – это координаты текущей позиции курсора. После этого мы старым координатам передаем координаты текущей позиции, благодаря этому получается непрерывная линия. Затем для обновления рисунка на нашем элементе управления pictureBox1 мы передаем ему данные с нашего экземпляра класса Bitmap.

Функция заливки:

Функция заливки принимает следующие аргументы:

  1. Экземпляр класса Bitmap;

  2. Структуру Point, которая представляет упорядоченную пару целых чисел — координат Х и Y, определяющую точку на двумерной плоскости;

  3. Цвет заливки.

Мы создаем стек, в котором будет находиться пара целых чисел – координат X и Y. Далее мы вставляем в стек нашу начальную точку. Весь алгоритм построен на сравнении пикселей старого цвета. Мы присваиваем значению старого цвета цвет пикселя текущей позиции. Дальше мы запускаем цикл, который прекратится только тогда, когда закончатся пиксели в нашем стеке. Дальше присваиваем экземпляру класс Point значение координат верхней части стека. После этого происходит закраска одного пикселя в новый цвет с помощью метода SetPixel.

Чтобы добавлять в стек новые пиксели, которые требуется закрасить, мы используем проверку по координате X и Y на то, входят ли они в рамки нашей области рисования. Система координат строится так:

Если это условие выполняется, внутри есть вложенная проверка. Мы используем метод GetPixel и проверяем соседние пиксели (слева, справа, снизу, сверху) на их цвет. Если цвет является старым, то есть который надо закрасить, то мы добавляем в наш стек координаты данного пикселя. Процедура повторяется, пока в стеке будут элементы.

КЛЮЧЕВЫЕ ЭЛЕМЕНТЫ ИСХОДНОГО КОДА ПРОГРАММЫ

Функция рисования произвольной области:

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)

{

Pen pb = new Pen(Color.Black);

Graphics g = Graphics.FromImage(pic);

if(e.Button == MouseButtons.Left)

{

g.DrawLine(pb, x1, y1, e.X, e.Y);

pictureBox1.Image = pic;

}

x1 = e.X;

y1 = e.Y;

}

Функция заливки замкнутой области на языке:

private void Fill(Bitmap bitmap, Point startPoint, Color newColor)

{

Stack<Point> pixels = new Stack<Point>();

pixels.Push(startPoint);

Color oldColor = bitmap.GetPixel(startPoint.X, startPoint.Y);

while (pixels.Count > 0)

{

Point p = pixels.Pop();

bitmap.SetPixel(p.X, p.Y, newColor);

if (p.X > 0)

{

if (bitmap.GetPixel(p.X - 1, p.Y) == oldColor) pixels.Push(new Point(p.X - 1, p.Y));

}

if (p.X < bitmap.Width - 1)

{

if (bitmap.GetPixel(p.X + 1, p.Y) == oldColor) pixels.Push(new Point(p.X + 1, p.Y));

}

if (p.Y > 0)

{

if (bitmap.GetPixel(p.X, p.Y - 1) == oldColor) pixels.Push(new Point(p.X, p.Y - 1));

}

if (p.Y < bitmap.Height - 1)

{

if (bitmap.GetPixel(p.X, p.Y + 1) == oldColor) pixels.Push(new Point(p.X, p.Y + 1));

}

}

}

ИНСТРУКЦИИ ПО ИСПОЛНЕНИЮ

Инструкция для языка C#:

Распаковать архив. Открыть директорию «bin», затем директорию «Debug». Запустить исполняемый файл «08 12.exe». Появится окно Form1. В нем можно рисовать черным цветом и заливать замкнутые области красным цветом.

РЕЗУЛЬТАТЫ ЗАПУСКА ПРОГРАММЫ

З апустив программу, появляется окно Form1 (рисунок 1).

Рисунок 1 – Окно

В данном окне есть область для рисования (рисунок 2) и текстовое поле (рисунок 3), в котором кратко описан алгоритм заливки.

Рисунок 2 – Область для рисования

Рисунок 3 – Текстовое поле

Далее в области для рисования, зажав левую кнопку мыши, можно нарисовать произвольные фигуры (рисунок 4), кривые (рисунок 5) и т.д.

Рисунок 4 – Произвольные фигуры

Рисунок 5 – Кривые

Ч тобы закрасить замкнутую область, надо нажать правую кнопку мыши в любом месте данной области. Заливка выполнится красным цветов (рисунок 6).

Рисунок 6 – Заливка замкнутой области

заключение

В ходе курсовой работы был написан алгоритм для рисования произвольной линии и для заливки замкнутой области. При запуске исполняемого файла, вы можете нарисовать любую фигуру и закрасить ее в красный цвет.