Разработка Gui на Qt (PySide6) - Фракталы

Задание A

Видео
Пример на Python
Пример на C++


Создайте приложение, которое отрисовывает кривую Коха порядка \(N\), начиная с \(N=0\). Кривая должна «смотреть вверх». Количество итераций меняется при помощи QSpinBox.


Кривая Коха отрисовывается внутри специального виджета в методе paintEvent. Виджет имеет слот, обновляющий значение числа итераций. Этот слот должен изменить значение поля класса, хранящего число итераций, затем вызвать у виджета метод repaint() для обновления содержимого. Сигнал valueChanged у QSpinBox, меняющего число итераций, соединяется с данным слотом виджета.


Кривая Коха должна отрисовываться методом paintEvent. Этот метод должен вызывать рекурсивную функцию, рисующую кривую Коха по заданному числу итераций и концам кривой. Концы кривой должны быть действительными числами, так отрисовка будет лучше. Также в эту функцию нужно передавать QPainter.


Для определения размеров виджета внутри метода paintEvent нужно использовать методы width() и height()

Задание B

Пример "ручной" компоновки обработкой resizeEvent на Python – не для использования, только для знакомства
Пример использования менеджеров компоновки на Python
Пример "ручной" компоновки обработкой resizeEvent на C++ – не для использования, только для знакомства
Пример использования менеджеров компоновки на C++
Документация на QBoxLayout – базовый класс для QHBoxLayout и QVBoxLayout


Окно приложения должно содержать SpinBox, управляющий количеством итераций кривой Коха. Размеры кривой Коха должны меняться при изменении размеров окна. Сама кривая Коха должна быть максимального размера, допустимого для данного размера окна и располагаться в центре окна.


Для изменения размеров виджета используется менеджер компоновки, метод paintEvent виджета должен определять собственные размеры при помощи вызова методов width() и height() и использовать данные размеры для рисования фрактала.


Изменение размеров кривой Коха должно быть "гладким", то есть при изменениях размера окна не должно быть "прыжков" кривой.

Задание C

Разные фракталы
Реализовать приложение, рисующее минимум три из перечисленных фракталов (один – кривая Коха, должно быть ещё два других, можно использовать примеры выше или иные фракталы). Функционал приложения:
а) выбор типа фрактала при помощи элемента управления типа меню, QRadioButton или QComboBox.
б) выбор глубины рекурсии фрактала при помощи SpinBox.
в) автоматическое масштабирование фрактала при изменении размеров окна приложения, как в предыдущем задании, с гладкой склейкой.