Данная программа на Python представляет собой графическое приложение, которое демонстрирует работу алгоритмов отсечения отрезков и многоугольников: алгоритм Коэна-Сазерленда и алгоритм Сазерленда-Ходжмана. Приложение предоставляет интерактивный интерфейс, созданный с использованием библиотек Tkinter и Matplotlib, позволяющий добавлять отрезки, рисовать многоугольники и задавать окно отсечения.
- Добавление отрезков: Ввод координат отрезков и их отображение на графике.
- Задание окна отсечения: Определение прямоугольного окна отсечения.
- Отсечение отрезков: Использование алгоритма Коэна-Сазерленда для отсечения отрезков относительно окна.
- Отсечение многоугольников: Использование алгоритма Сазерленда-Ходжмана для отсечения многоугольников относительно окна.
- Интерактивное рисование многоугольников: Щелчки мыши на графике для создания многоугольника.
- Очистка графика: Сброс графика для начала новой демонстрации.
Использование приложения
python имя_файла.py
- Введите координаты отрезка и нажмите "Добавить отрезок".
- Введите координаты окна отсечения и нажмите "Установить окно".
- Нажмите "Отсечь", чтобы отсечь отрезки или многоугольники.
- Для рисования многоугольника нажмите "Нарисовать многоугольник" и кликайте на графике для добавления точек.
- Чтобы завершить рисование многоугольника, нажмите "Закончить многоугольник".
Основное окно:
- График: Отображение координатной плоскости с возможностью добавления объектов.
- Элементы управления:
- Поля ввода для координат отрезков и окна отсечения.
- Кнопки для добавления объектов, отсечения и очистки графика.
- Отрезок: x1 y1 x2 y2 (например, -10 -5 15 20).
- Окно отсечения: Xmin Ymin Xmax Ymax (например, -15 -15 15 15).
-
Алгоритм Коэна-Сазерленда: Используется для отсечения отрезков относительно прямоугольного окна. Делит координатное пространство на области с помощью кодов положения и определяет видимость отрезков.
-
Алгоритм Сазерленда-Ходжмана: Применяется для отсечения многоугольников. Проверяет каждую сторону многоугольника относительно окна и формирует новый отсеченный многоугольник.