Нужна программа, которая будет генерировать такие игры из графических файлов (преположительно .eps, но можно и любой другой формат, на ваш выбор).
Пример ожидаемого результата:
На вход загружаем один рисунок. (пример
)
На выходе получаем два рисунка:
- игра (только точки и номерки со звёздочками)
- ответ (точки, соединенные линиями, нумерация и звездочки)
Общие принципы:
- рисунок состоит из множества отдельных линий
- каждая линия состоит из двух или более точек
- все точки пронумерованы по порядку
- последняя точка каждой линии помечается звездочкой
- точки и номера не должны наползать друг на друга
- для замкнутых линий (окружность) создается разрыв, чтобы обозначить начало и конец линии
- в местах излома линий должны ставиться точки, чтобы не нарушать геометрию рисунка
- положение номера относительно соответствующей точки не принципиально (для одной точки может быть слева, для другой справа внизу, главное, чтобы было понятно, к какой точке относится номер)
Необходимые настройки:
- количество точек на игру
- размер точки/номера
- размер изображения игры (а4, а5)
- порядок линий (последовательно/случайно) определяет, в каком порядке будут нумероваться линии (поочередно с верхней левой точки до нижней правой,например, или вразброс, чтобы усложнить решение игры)
Дополнительные пожелания (опционально):
- возможность двигать точки в интерфейсе программы, чтобы корректировать рисунок до выгрузки
- возможность добавлять/удалять точки с соответствующим пересчетом нумерации
- выгрузка результата в векторном формате со слоями (точки, номера, соединительные линии)
Предположительный алгоритм обработки
Загрузить файл.
Идентифицировать все линии.
Промаркировать точками начало и звездочками конец каждой линии
Если линия замкнутая, сделать разрыв, чтобы было начало и конец.
Для каждой линии найти изломы и изгибы и проставить точки в их вершинах, чтобы сохранить геометрию.
Убедиться, что точки не наползают друг на друга (между любыми двумя точками расстояние может быть минимальное, главное, чтобы точки не соприкасались друг с другом).
Посчитать количество точек и сравнить с необходимым количеством точек из настроек.
Если точек меньше, добавить необходимое количество точек на рисунок, расставляя точки на линии в зависимости от расстояния между соседними точками от большего к меньшему.
Пронумеровать точки.
Разместить номера таким образом, чтобы номер не наползал на другой номер или точку.
Соединить все точки прямыми линиями по порядку.
Вывести результат в интерфейс приложения, где одним цветом будет изображен исходный файл, а результат с точками и прямыми линиями будет другим цветом.
Реализовать возможность добавлять/удалять и перемещать точки.
При перемещении точки, относящиеся к ней номер и соединительная линия перемещаются соответственно.
При удалении/добавлении точки вся нумерация пересчитывается соответственно.
После окончания редактирования и нажатия кнопки "Сохранить" результат сохраняется на компьютер пользователя.
Результат один файл со слоями в формате .ai либо .eps + два файла в формате JPG (игра с точками и номерами и ответ с точками, номерами и линиями).
Если дочитали ТЗ, напишите в начале сообщения "дароу" чтобы подтвердить что вы не копипастер