Функциональное и логическое программирование

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

?очки передаем в функцию захвата фигуры.

Принцип работы функции захвата фигуры:

.получаем список координат соседних ненулевых точек для данной точки.

.Сохраняем координаты найденной точки в списке точек фигуры и заменяем его значение на 0.

.Повторяем пункты 1 и 2 для всех точек из списка, полученного в пункте 1

.Фигура считается обнаруженной, если все соседние точки равны нулю.

 

Рис. 3. Порядок обхода соседних точек точки .

 

Рис.4. Начало захвата фигуры.

 

Рис. 5. Завершение захвата фигуры

 

Списки координат точек фигур сохраняем в списке фигур. Поиск фигур заканчивается, когда доходим до нижней правой точки.

 

2.2.3 Поиск треугольников

Треугольники на изображении могут располагаться любым образом, но можно выделить шесть общих положений треугольников.

 

Рис. 6. Общие положения треугольников на изображении.

 

.2.4 Алгоритм поиска треугольника

1.Проверяем замкнутость фигуры. Если фигура не замкнута, то это не треугольник, иначе - переходим в пункт 2.

.Выделяем четыре крайние точки, переходим в пункт 3.

.Считаем, что нижняя точка фигуры не определена. Вершинами треугольника будут верхняя, правая и левая точки. Проверяем принадлежность всех точек фигуры отрезкам, соединяющим стороны. Если ошибок нет, то треугольник найден, иначе - переходим в пункт 4.

.Считаем, что верхняя точка фигуры не определена. Вершинами треугольника будут нижняя, правая и левая точки. Проверяем принадлежность всех точек фигуры отрезкам, соединяющим стороны. Если ошибок нет, то треугольник найден, иначе - переходим в пункт 5.

.Считаем, что правая точка фигуры не определена. Вершинами треугольника будут верхняя, левая и нижняя точки. Проверяем принадлежность всех точек фигуры отрезкам, соединяющим стороны. Если ошибок нет, то треугольник найден, иначе - переходим в пункт 6.

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

.Выделяем левую и правую точки, переходим в пункт 8

.Вычисляем точку, наиболее отдаленную от отрезка, соединяющего левую и правую точки - это будет третья вершина треугольника, переходим в пункт 9.

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

 

.2.5 Проверка замкнутости фигуры

Фигура хранится в памяти в виде списка координат точек. Для каждой точки фигуры проверяем условие - если сумма значений всех соседних точек больше двух, то фигура замкнута, иначе - не замкнута.

 

Рис. 7. Проверка замкнутости.

 

На левой стороне Рисунка №7 у каждой точки есть как минимум 2 соседние точки с единичным значением - фигура замкнута. На правой части Рисунка №7 точка выделенная красным кружком имеет только одну единичную соседнюю точку - фигура не замкнута.

2.2.6 Проверка принадлежности точки отрезку

1.Если координаты всех точек по совпадают, то возвращаем иначе - переходим в пункт 2.

.Если координаты всех точек по совпадают, то возвращаем TRUE, иначе - переходим в пункт 3.

.Если координаты начала и конца отрезка совпадают, то возвращаем , чтобы избежать деления на ноль, иначе - переходим в пункт 4.

.Проверяем равенство уравнения:

 

(1)

 

- координаты точки, начало и конец отрезка.

Если равенство выполняется, то точка принадлежит отрезку - возвращаем , иначе - .

 

.2.7 Поиск наиболее отдаленной от отрезка точки

Чтобы вычислит расстояние от точки до отрезка, воспользуемся следующей формулой:

 

(2)

Рис. 8. Вычисление расстояния от точки до отрезка.

Расстоянием от точки до отрезка считается длинна перпендикуляра, опущенного из заданной точки на отрезок.

 

.3 Построение измененного треугольника

 

1.Находим середины сторон треугольника по формуле:

 

(3)

(4)

 

- координаты точки, начало и конец отрезка.

Переходим в пункт 2.

2.Соединяем вычисленные точки отрезками - в цикле вычисляем координаты всех точек отрезка по формуле:

 

(5)

(6)

 

координаты вычисленной точки.

координата начала отрезка.

длинна проекции отрезка на ось

длинна проекции отрезка на ось

 

2.4Вывод результата работы программы

 

.4.1 Вывод обработанного изображения

Треугольники хранятся в памяти в виде списков координат вершин. По координатам всех точек в нулевую матрицу записываются единицы. Обновленная матрица записывается в выходной текстовый файл. Текстовые файлы с помощью утилиты txt2bmp.exe преобразуются в графическое изображение.

 

.4.2 Вывод информации о распознанных фигурах

Информация о распознанных фигурах выводится в текстовый файл. Если обнаруженная фигура является треугольником, то выводится список его вершин, иначе - выводится левая-верхняя и правая-нижняя вершины квадрата, ограничивающего данную фигуру.

 

Рис. 9. Выделение границ фигуры.

 

2.5Применение макросов в программе

 

Мкрос - программный объект, который во время вычисления заменяется на новый объект, создаваемый определением макроса на основе его аргументов, затем выражается обычным образом.

В разработанной программе макрос используется пр?/p>