STL-Distance — это проект для вычисления расстояния между двумя 3D-моделями, представленными в формате STL (STereoLithography). Основная цель проекта — предоставить эффективные алгоритмы для анализа геометрии объектов, включая поиск ближайших точек и треугольников между двумя телами.
Проект может быть полезен для задач в области компьютерной графики, инженерного анализа, 3D-печати и других областей, где требуется точное вычисление расстояний между сложными 3D-объектами.
Проект состоит из следующих ключевых компонентов:
-
Чтение STL-файлов:
- Используется библиотека
stl_reader
(Распространяется под лицензией BSD-2-Clause. Подробности см. в файле LICENSE.) для парсинга STL-файлов и извлечения треугольников, составляющих поверхность 3D-моделей.
- Используется библиотека
-
Математические операции:
- Реализованы классы и функции для работы с векторами, матрицами, треугольниками и другими геометрическими объектами.
-
Алгоритмы поиска расстояний:
- Алгоритм GJK (Gilbert-Johnson-Keerthi) для вычисления минимального расстояния между двумя выпуклыми телами.
- KD-дерево для быстрого поиска ближайших точек.
- AABB-дерево (Axis-Aligned Bounding Box) для оптимизации поиска ближайших треугольников.
-
Алгоритм AltMDM:
- Реализован метод минимального расстояния для поиска ближайших точек между двумя множествами.
-
Чтение STL-файлов:
- Загрузка 3D-моделей из STL-файлов.
- Преобразование данных STL в треугольники.
-
Вычисление расстояний:
- Поиск минимального расстояния между двумя телами.
- Определение ближайших треугольников между телами.
- Оптимизация вычислений с использованием KD-дерева и AABB-дерева.
-
Анализ геометрии:
- Вычисление нормалей, средних точек и других характеристик треугольников.
- Работа с векторами и матрицами для выполнения линейной алгебры.
-
Тестирование:
- Покрытие основных компонентов тестами с использованием Google Test (GTest).
- Операционная система: Windows, Linux или macOS.
- Компилятор: Поддержка стандарта C++20 (например, GCC 10+, Clang 10+, MSVC 2019+).
- CMake: Версия 3.28 или выше.
- Google Test: Для выполнения тестов.
- stl_reader: Библиотека для работы с STL-файлами. Распространяется под лицензией BSD-2-Clause. Подробности см. в файле LICENSE.
- Google Test: Для написания и выполнения модульных тестов.
-
Убедитесь, что у вас установлен CMake и компилятор с поддержкой C++20.
-
Склонируйте репозиторий:
git clone https://github.com/Joraslav/STL-Distance.git cd STL-Distance
-
Создайте директорию для сборки и перейдите в неё:
mkdir build cd build
-
Запустите CMake для генерации файлов сборки:
cmake .. -G "MinGW Makefiles"
-
Собрать проект:
сmake --build .
-
Запустить тесты:
ctest
STL-Distance/
├── src/ # Исходный код
│ ├── AABBTree.hpp # Реализация AABB-дерева
│ ├── AABBTree.cpp
│ ├── AltMDM.hpp # Алгоритм AltMDM
│ ├── AltMDM.cpp
│ ├── Distance.hpp # Основной класс для вычисления расстояний
│ ├── Distance.cpp
│ ├── GJK.hpp # Алгоритм GJK
│ ├── GJK.cpp
│ ├── KDTree.hpp # Реализация KD-дерева
│ ├── KDTree.cpp
│ ├── MathOperations.hpp # Математические операции
│ ├── MathOperations.cpp
│ ├── Matrix.hpp # Работа с матрицами
│ ├── MiddlePoint.hpp # Средние точки треугольников
│ ├── MiddlePoint.hpp
│ ├── ReadSTL.hpp # Чтение STL-файлов
│ ├── ReadSTL.cpp
│ ├── Triangle.hpp # Работа с треугольниками
│ ├── Triangle.cpp
│ ├── Vector.hpp # Работа с векторами
│ └── Vector.cpp
├── tests/ # Тесты
├── data/ # STL-файлы для анализа
├── build/ # Директория сборки
├── CMakeLists.txt # Конфигурация CMake
└── README.md
Этот проект распространяется под лицензией BSD-3-Clause. Подробности см. в файле LICENSE.