Данная программа решает следующую задачу:
Имеется текстовый файл, в нём записано 15 строк, в каждой строке – 15 символов. Символы могут быть только ‘0’ или ‘1’. В этом файле «нарисована» одна фигура из единиц – закрашенный квадрат или круг. Известно, что фигура полностью помещается в границах изображения (крайние строки изображения всегда полностью заполнены нулями). Также известно, что диаметр круга или сторона квадрата может быть от 5 до 10 символов включительно. Однако, где точно на картинке расположена фигура и какая она – неизвестно.
Требуется выяснить что за фигура, вывести её название и основные параметры. Также следует вывести степень уверенности в правельности решения.
000000000000000
000111111000000
000111111000000
000111111000000
000111111000000
000111111000000
000111111000000
000000000000000
000000000000000
000000000000000
000000000000000
000000000000000
000000000000000
000000000000000
000000000000000
Для сборки находясь в директории с проектом выполните:
$ make
В результате в директории проекта в папке bin
вы получите исполняемый файл check
.
Программа принимает на стандартный ввод данные формат которых описан в пункте Задача
.
Входные данные на которых проходило тестирование можно найти в папке test
в директории проекта.
Вывод программы имеет следующий вид:
распознаная фигура
ошибка
описание
- распознаная фигура - "круг", "квадрат" или "неизвестная фигура". В последнем случае осталные пункты не будут выведены.
- ошибка - Отношение несовпавшей площади эталонной модели и площади исходных данных.
- описание - Описание основных параметров фигуры.
В папке проекта в директории utils
можно найти несколько полезных скриптов:
- showarea - утилита позволяющая отображать входные данные. Для этого ей первым параметром нужно указать файл с корректными входными данными.
- areagen - скрипт позволяющий генерировать входные данные.
- tester - скрипт выполняющий тестирование программы. Результаты тестирования складываются в папку
log
.
Суть алгоритма в том что бы по проекциям на оси X и Y входных данных расчитать параметры фигуры предполагая зарание её вид. После чего построить эталонные проекции этой фигуру и сравнить с исходными. По различающейса площади можно судить о том на сколько мы близки к истине. Так же для того что бы обистечить устойчивость алгоритма к помехам был реализован фильтр.