Skip to content

C++ проект для вычисления минимального расстояния между 3D-моделями в формате STL. В основе лежат алгоритмы GJK, KD-дерева и AABB-дерева, обеспечивающие точный и быстрый анализ геометрии. Проект подходит для задач компьютерной графики, 3D-печати и инженерного анализа.

License

Notifications You must be signed in to change notification settings

Joraslav/STL-Distance

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

STL-Distance

Описание проекта

STL-Distance — это проект для вычисления расстояния между двумя 3D-моделями, представленными в формате STL (STereoLithography). Основная цель проекта — предоставить эффективные алгоритмы для анализа геометрии объектов, включая поиск ближайших точек и треугольников между двумя телами.

Проект может быть полезен для задач в области компьютерной графики, инженерного анализа, 3D-печати и других областей, где требуется точное вычисление расстояний между сложными 3D-объектами.


Основные компоненты

Проект состоит из следующих ключевых компонентов:

  1. Чтение STL-файлов:

    • Используется библиотека stl_reader (Распространяется под лицензией BSD-2-Clause. Подробности см. в файле LICENSE.) для парсинга STL-файлов и извлечения треугольников, составляющих поверхность 3D-моделей.
  2. Математические операции:

    • Реализованы классы и функции для работы с векторами, матрицами, треугольниками и другими геометрическими объектами.
  3. Алгоритмы поиска расстояний:

    • Алгоритм GJK (Gilbert-Johnson-Keerthi) для вычисления минимального расстояния между двумя выпуклыми телами.
    • KD-дерево для быстрого поиска ближайших точек.
    • AABB-дерево (Axis-Aligned Bounding Box) для оптимизации поиска ближайших треугольников.
  4. Алгоритм AltMDM:

    • Реализован метод минимального расстояния для поиска ближайших точек между двумя множествами.

Функционал

Основные возможности

  1. Чтение STL-файлов:

    • Загрузка 3D-моделей из STL-файлов.
    • Преобразование данных STL в треугольники.
  2. Вычисление расстояний:

    • Поиск минимального расстояния между двумя телами.
    • Определение ближайших треугольников между телами.
    • Оптимизация вычислений с использованием KD-дерева и AABB-дерева.
  3. Анализ геометрии:

    • Вычисление нормалей, средних точек и других характеристик треугольников.
    • Работа с векторами и матрицами для выполнения линейной алгебры.
  4. Тестирование:

    • Покрытие основных компонентов тестами с использованием 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: Для написания и выполнения модульных тестов.

Инструкция по сборке

  1. Убедитесь, что у вас установлен CMake и компилятор с поддержкой C++20.

  2. Склонируйте репозиторий:

    git clone https://github.com/Joraslav/STL-Distance.git
    cd STL-Distance
  3. Создайте директорию для сборки и перейдите в неё:

    mkdir build
    cd build
  4. Запустите CMake для генерации файлов сборки:

    cmake .. -G "MinGW Makefiles"
  5. Собрать проект:

    сmake --build .
  6. Запустить тесты:

    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.

About

C++ проект для вычисления минимального расстояния между 3D-моделями в формате STL. В основе лежат алгоритмы GJK, KD-дерева и AABB-дерева, обеспечивающие точный и быстрый анализ геометрии. Проект подходит для задач компьютерной графики, 3D-печати и инженерного анализа.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published