Лабораторная работа №3: Разработка алгоритма выявления нарушений КТО на базе метода сканирующей прямой
Изучение алгоритма сканирующей (заметающей) прямой и получение практических навыков разработки логики для поиска геометрических нарушений проектных норм (KTO).
- Взять JSON-файл из предыдущих работ, внести в него ряд изменений, приводящих к появлению нарушения «Касание полигонов в одной точке» (corner-to-corner touching). Касание для ортогональных полигонов возможно "углами". Сохранить файл под именем
test_schema.json. - Изучить предоставленный базовый "каркас" алгоритма сканирующей прямой (
sweepLine.py). Каркас реализует движение вертикальной прямой по оси X слева направо и генерирует событие при встрече с каждой вершиной полигона. - Разработать логику выявления конкретного нарушения: «Касание полигонов в одной точке» (corner-to-corner touching). Для этого необходимо выполнить соответствующие доработки базового каркаса в функции внутри функции-коллбэка
detect_point_contact, которая инжектируется в каркас. По результатам проверки формируется файлstudent_predictions.json.
Обрабатывалась топология из файла test_schema.json
Визуальное представление:
Результат представлен в файле student_predictions.json
- Взять JSON-файл из предыдущих работ, внести в него ряд изменений, приводящих к появлению нарушения «Малая величина зазора между полигонами». Сохранить файл под именем
test_schema.json. - Переработать алгоритм сканирующей прямой для выявления нарушений, связанных с малой величиной зазора. Для этого нужно: связать события так, чтобы образовалась цепочка и текущее событие могло обратиться к предыдущему и к последующему. Особое внимание уделить множеству
active_elements, которое должно хранить номера полигонов, расположенных слева по оси Х от текущего на некотором расстоянии, равным минимальной величине зазора. При переходе к полигонам, лежащим дальше этого расстояния, из множества исключаем лишние элементы. Повторить тоже самое для координат Y, то есть сформировать новую цепочку связанных событий и запустить сканирующую прямую снизу вверх (или сверху вниз). В результате, получить расстояния между параллельными ребрами и найти пары, расположенные слишком близко друг к другу. По результатам проверки формируется файлstudent_predictions.json. - Разработать способ визуализации нарушений на основе информации в файле
student_predictions.json.
- Титульный лист;
- Формулировка задания;
- Доработанный файл
sweepLine.pyдля задания №1; - Изображение обрабатываемой топологии ИС для задания №1;
- JSON файл с найденными ошибками для задания №1;
- Доработанный файл
sweepLine.pyдля задания №2; - Изображение обрабатываемой топологии ИС для задания №2;
- JSON файл с найденными ошибками для задания №2;
- Изображение с найденными нарушениями для задания №2ж
- Вывод по работе.
