Афинные преобразования
Автор: ZZTaSha • Февраль 12, 2024 • Контрольная работа • 2,169 Слов (9 Страниц) • 86 Просмотры
Оглавление
Цель работы и задание 3
Ход выполнения лабораторной работы 4
Реализация программы. 5
Листинг программы (обязательное) 12
Литература 18
Цель работы и задание
Целью выполнения данной лабораторной работы является изучение теоретических основ двумерных аффинных преобразований, приобретение практических навыков моделирования двумерных изображений и применения аффинных преобразований.
Задание:
Реализовать программу, построения двумерного изображения и применения аффинных преобразований для фигуры на рисунке 1. Над фигурой выполнить все аффинные преобразования: перенос, отражение, масштабирование, поворот.
[pic 1]
Рисунок 1 – Фигура для выполнения лабораторной работы
Ход выполнения лабораторной работы
Для выполнения данной лабораторной работы мною был выбран язык программирования Python и среда программирования Visual Studio Code. Данный выбор обусловлен умением программирования на данном языке, а также легкостью рисования, используя библиотеку pygame.
- Поворот
Поворот вокруг начальной точки описывается формулами 1.1 и 1.2
[pic 2]
[pic 3]
где φ – угол поворота.
- Растяжение
Растяжение (сжатие) вдоль координатных осей описывается формулами 1.3 и 1.4.
[pic 4]
[pic 5]
где α и δ – коэффициенты растяжения, α > 0 и δ > 0.
Растяжение (сжатие) вдоль оси абсцисс обеспечивается при условии, что α > 1 и δ > 1.
- Отражение относительно оси абсцисс задается при помощи формул 1.5 и 1.6.
[pic 6]
[pic 7]
- Перенос обеспечивают соотношения (1.7, 1.8)
[pic 8]
[pic 9]
где λ и µ - координаты вектора переноса.
Реализация программы.
Для реализации программы необходимо создать список точек с координатами X и Y (рис. 2)
[pic 10]
Рисунок 2 – Координаты точек для построения заданной фигуры
Так же необходимо импортировать библиотеки, которые позволят реализовать поставленную задачу (рис. 3)
[pic 11]
Рисунок 3 – Библиотеки, необходимые для реализации задачи
Дале приступаем к реализации пользовательского интерфейса. Для это воспользуемся PyQt5. PyQt5 - это набор Python библиотек для создания графического интерфейса на базе платформы Qt5 от компании Digia. За создание пользовательского инструмента отвечает класс Pannell, в котором прописываем настройки окна пользовательского интерфейса, поля для введения значений коэффициентов аффинных преобразований и кнопки для запуска процесса рисования (рис. 4, 5, 6)
[pic 12]
Рисунок 4 – Класс
[pic 13]
Рисунок 5 – Поле для введения значений коэффициентов аффинных преобразований
[pic 14]
Рисунок 6 - Кнопка
В пользовательском интерфейсе мною установлено 5 полей для введения коэффициентов, в которых с помощью Placeholder обозначены необходимые коэффициенты, 4 кнопки, передающие введенные данные в методы, вызывающие процесс рисования выбранного аффинного преобразования (рис. 7)
[pic 15]
Рисунок 7 – Пользовательский интерфейс
Теперь переходим к рисованию преобразований.
Первое что нужно сделать – настроить окно для рисования и разметить в нем оси X и Y. После этого настраиваем и сам процесс рисования. Процесс рисования основан на соединении точек, переданных в метод, линиями и подписывании этих точек координатами.
Весь процесс реализации рисования показан в Приложении А.
Результат работы программы построения двумерного изображения и применения аффинных преобразований.
На рисунке 2 показан Поворот заданного рисунка на [pic 16]
[pic 17]
Рисунок 2 – Результат работы программы, реализация аффинного преобразования Поворот
На рисунке 3 показан результат работы программы реализация Растяжения/сжатия с коэффициентами растяжения 0,5 и 0,8
[pic 18]
Рисунок 3 – Результат работы программы, реализация аффинного преобразования Растяжение(сжатие)
...