Реализовать приложение с использованием квадродеревьев, октодеревьев или k-d деревьев.
Приложение должно включать модуль с реализацией соответствующего дерева. Дерево должно поддерживать следующие методы:
- вставка
- удаление
- вхождение в диапазон/область (для 2d)/объем (для 3d)
Возможна реализация следующих приложений:
- Астероиды. Поиск столкновений на основе квадродеревьев:
- Сжатие изображений
- Поиск ближайшего объекта на карте
Приложение, моделирующее полет объектов круглой формы и поиск столкновений между объектами и между объектом и границей. Поиск столкновений должен быть реализован на основе квадродеревьев. Полный перебор объектов запрещается.
Столкновения считать абсолютно упругими. Масса шаров равна их площади.
Предусмотреть:
- Поиск столкновений через квадродеревья.
- Визуализацию полета шаров.
- Визуализацию границ дерева (в динамике).
- Графический интерфейс для выбора:
- количества шаров;
- границ размеров шаров, сами размеры генерируются случайным образом в пределах этих границ;
- размеры области;
- границы скоростей, сами скорости генерируются случайным образом в пределах этих границ для каждого шара.
- *Доработать программу до полноценной игры
Астероиды:
- в центре разместить "космический корабль" в виде треугольника;
- реализовать стрельбу по шарам-астероидам и разрушение последних;
- при столкновении шара с кораблем, должна отниматься 1 жизнь;
- конец игры при исчерпании всех жизней.
Допускается реализация как в 2d, так и в 3d пространстве.
Пример:
Подробнее см. видео https://www.youtube.com/watch?v=eED4bSkYCB8
Реализовать консольную утилиту (с помощью CLI, Command line interface) по сжатию изображения с помощью квадродеревьев.
Предусмотреть:
- Сжатие изображения с помощью квадродеревьев.
- Сохранение итогового изображения.
- Сохранение изображения с границами построенного дерева.
- Указание степени сжатия.
- Использование потоков для сжатия отдельных областей.
- *Создание гифки пошагового сжатия любой картинки
Пример:
Реализовать программу для поиска ближайшего объекта заданного типа на карте. Поиск осуществлять с помощью k-d деревьев на основе евклидова расстояния.
Предусмотреть:
- Способ выбора объектов нужного типа (магазин, кафе, и др.).
- Способ выбора точки для которой нужно произвести поиск.
- Способ выбора района поиска.
- Поиск ближайшего объекта с помощью k-d деревьев.
- Вывод данных о найденном объекте (адрес, расстояние от точки до объекта)
- Визуализацию карты, объектов и точки.
- *Реализация интерактивной карты.
Работать с картами необходимо через API открытых ресурсов, см. полезные материалы.
Программа может быть как консольной, так и иметь графический интерфейс.
Для реализации карт в Pytohn см. ссылки:
- Как сделать интерактивную карту с помощью Python и open source библиотек
- How to show Folium map inside a PyQt5 GUI?
- How to create widget in pyqt5 to show google map
- How to include folium map into PyQt5 application window?
Программа должна быть оформлена в виде пакета, где реализация дерева должен
находиться в отдельном модуле с именем, например, tree.py
.
Дерево должно быть реализованно в виде класса с соответствующими методами операций и свойствами для доступа к атрибутам.
Общие требования для всех вариантов:
- код работы проходит проверку утилитой pylint
с конфигурационным
файлом .pylintrc
.
- код работы успешно проходит тесты, если таковые имеются.
- наличие документации к модулям, функциям, классам и методам.
- наличие аннотации типов.
Вариант "Астероиды":
- На оценку 3 балла:
- реализовать пункты 1, 2;
- размеры шаров одинаковы;
- область фиксирована.
- На оценку 4 балла:
- размеры шаров случайно генерируются из фиксированного диапазона;
- дополнительно реализовать пункт 3.
- На оценку 5 балла:
- дополнительно реализовать пункт 4.
- Плюс в карму:
- пункт 5.
Вариант "Сжатие изображений":
- На оценку 3 балла:
- реализовать пункты 1, 2, 3, 4.
- На оценку 5 балла:
- дополнительно реализовать пункт 5.
- Плюс в карму:
- пункт 6.
Вариант "Поиск ближайшего объекта на карте":
- На оценку 3 балла:
- реализовать пункты 1, 2, 3, 4, 5.
- На оценку 5 балла:
- дополнительно реализовать пункт 6.
- Плюс в карму:
- пункт 7.
- Использование квадродеревьев при расчёте пробок 2ГИС
- Использование матричных квадродеревьев для хранения площадных картографических объектов
- Деревья квадрантов и распознавание коллизий
- Quadtree
- k-d tree
- https://en.wikipedia.org/wiki/Octree
- Using D3 Quadtrees to Power An Interactive Map for Bonnier Corporation
- Получаем данные Open Street Map в Python
- How To Efficiently Display Large Amounts of Data on iOS Maps
- Transform an image into a Quadtree
- Pygame how to let balls collide
- Collision detection