Я использую CGAL библиотека для триангуляции трехмерного облака точек. Иногда приложение работает нормально, но в большинстве случаев оно зависает. Он входит в бесконечный цикл при вставке новой трехмерной точки в триангуляцию. Эту проблему я получаю только на Windows, на Linux она работает нормально всегда. Я использую CGAL 4.6 x64 с ядром Exact_predicates_inexact_constructions_kernel с Visual Studio 2012/2015 на Windows 8.1 x64 и GCC на Ubuntu 14.04 x64.
Любые предложения о том, как решить эту проблему в сборке Windows?
ОБНОВЛЕНИЕ: перейдите по этой ссылке, чтобы найти минимальный код для воспроизведения проблемы и пример набора данных: https://drive.google.com/file/d/0B8bb0qT4PvT8V2hqUEt0RUstLTg
Проблема, похоже, заключается в оптимизированной процедуре поиска ближайшей точки и вставки новой точки (две части кода, определенные до компиляции, эквивалентны, но вторая оптимизируется двумя способами: используйте только одну местонахождение () вместо двух и не выделяйте / не используйте станд :: вектор за каждую точку).
Я думаю, что ошибка в вашем struct adjacent_vertex_back_inserter_t
operator=
должно быть следующим:
inline void operator=(const vertex_handle_t& w) {
assert(! delaunay.is_infinite(v))
if ( !delaunay.is_infinite(w) && (delaunay.geom_traits().compare_distance_3_object()(p, w->point(), v->point()) == CGAL::SMALLER)){
v = w;
}