===Задание 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://drive.google.com/file/d/1QCU5VX-prZ4wZnOp108CD7SvjuCI8MoA/view?usp=sharing Видео))
((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.
в) автоматическое масштабирование фрактала при изменении размеров окна приложения, как в предыдущем задании, с гладкой склейкой.

===Задание D===
((https://drive.google.com/file/d/1jHYnjaeb86Vhu4iq45YOEZcBbAA01pvW/view?usp=sharing Видео))
((https://u.pcloud.link/publink/show?code=XZmVbj0Zdnsi59ek0kfEwp1ivzwswhAepYc7 Пример на Python))
((https://u.pcloud.link/publink/show?code=XZoojNXZ6g3SGk2LHj4OurRmylLF3jXuQpJy Пример на C++))

Функционал приложения: масштабирование фрактала при помощи колеса мыши, перемещение фрактала внутри окна при помощи мыши, изменение фрактала при изменении размеров окна.

Требования к масштабированию фрактала.

  1. Все три операции (перемещение фрактала мышью, изменение масштаба про помощи колеса, изменение размеров окна должны происходить “гладко”, то есть не должно быть резких скачков изображения при последовательных применений разных операций).
  1. Масштаб изображения меняется только при движении колесом мышью. При изменении размеров окна масштаб фрактала не меняется.
  1. При движении колеса мыши масштаб меняется таким образом, что точка, расположенная в центре окна, остается неподвижной (вариант, который тоже принимается, но более сложный в реализации: неподвижной остается точка, на которую указывает мышь).
  1. При изменении размеров окна масштаб не меняется, а изображение перемещается таким образом, чтобы точка, которая была в центре окна, продолжала оставаться в центре окна.


----
адрес оригинала: ((/Информатика/Архив/2024/10Проф/QtFractals))