У меня есть две невыпуклые сетки, и я хочу найти ближайшее расстояние между ними. Для моих нужд достаточно приблизительного значения (при условии, что оно не слишком сильно отклоняется от истинного значения).
Я разбиваю невыпуклые сетки на множество выпуклых частей, а также из соображений скорости нахожу выпуклые оболочки каждой выпуклой части.
Затем я проверяю расстояния для всех комбинаций между корпусами первого и второго меша. Самый короткий определяет самое близкое расстояние между двумя сетками.
У меня уже есть рабочее решение с пакетом Оптимальные расстояния CGAL (см. изображение ниже). Результат хороший, но время выполнения не идеальное, на самом деле это главное узкое место в моем пайплайне.
Понятно, что эта проблема требует больших ресурсов, но было бы неплохо иметь более быструю альтернативу с CGAL или другой библиотекой или подходом, дающим аналогичный результат. К сожалению, я не нашел альтернативы до сих пор.
Обновление:
Приведенная выше ссылка указывает на пример CGAL, которому я следую, а именно на пример «polytope_distance_d_fast_exact.cpp». Что касается используемого ядра, я использую:
// use an inexact kernel...
typedef CGAL::Homogeneous<double> K;
typedef K::Point_3 Point;
// ... and the EXACT traits class based on the inexcat kernel
typedef CGAL::Polytope_distance_d_traits_3<K, ET, double> Traits;
typedef CGAL::Polytope_distance_d<Traits> Polytope_distance;
CGAL::Lazy_exact_nt<CGAL::Gmpzf>::Lazy_exact_nt
не срабатывает вQR_solver_impl.h
- person dim_tz   schedule 24.09.2014