Это старая версия Информатика/Архив/2024/10Проф/QtFractals за 03.05.2024 21:47 под редакцией DenisKirienko.

Просмотр кода страницы Разработка Gui на Qt (PySide6) - Фракталы страница

===Задание A===
((https://drive.google.com/file/d/13k09ftjH2LeIWjxN5i7yf5HVlw5fPnim/view?usp=sharing Видео))
((https://u.pcloud.link/publink/show?code=XZcqXS0ZODkD0RSLKyQzltzVwGaeTRVCxJ97 Пример на Python))
((https://u.pcloud.link/publink/show?code=XZHUDIXZwhN0dBJm5u0fkuPmlWhJshWgDhOX Пример на C++))

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

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

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

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

===Задание B===
((https://u.pcloud.link/publink/show?code=XZVtXS0ZgtWw5UTAKchvWg37XuhA4zkeruQk Пример "ручной" компоновки обработкой resizeEvent на Python)) - не для использования, только для знакомства
((https://u.pcloud.link/publink/show?code=XZ4tXS0ZH5yOa0cEclbjfG4EvADn4BpTtdik Пример использования менеджеров компоновки на Python))
((https://u.pcloud.link/publink/show?code=XZDOJAXZLiUopk1KSqV3yt9ulSelrpYXbJby Пример "ручной" компоновки обработкой resizeEvent на C++)) - не для использования, только для знакомства
((https://u.pcloud.link/publink/show?code=XZigDIXZHoNSFYorFvLsg4hzI71kLVvkpp8y Пример использования менеджеров компоновки)) на C++ 
((https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/QBoxLayout.html Документация на QBoxLayout - базовый класс для QHBoxLayout и QVBoxLayout))

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

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

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

===Задание C===
((https://ejudge.179.ru/tasks/python/2027v/14-turtle-fractals.html Разные фракталы))
Реализовать приложение, рисующее минимум три из перечисленных фракталов (один - кривая Коха, должно быть ещё два других, можно использовать примеры выше или иные фракталы). Функционал приложения:
а) выбор типа фрактала при помощи элемента управления типа ((https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/QMenu.html меню)), ((https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/QRadioButton.html QRadioButton)) или ((https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/QComboBox.html QComboBox)).
б) выбор глубины рекурсии фрактала при помощи ~SpinBox.
в) автоматическое масштабирование фрактала при изменении размеров окна приложения, как в предыдущем задании, с гладкой склейкой.