CGAL: сумма Минковского вдоль пересекающихся полилиний

Я только начал использовать CGAL для вычисления суммы Минковского по полилинии — по сути, операция «скольжения». Вот хороший пример этого:

http://doc.cgal.org/latest/Minkowski_sum_3/index.html#Minkowski_sum_3Glide

К сожалению, я сталкиваюсь с проблемами, как только некоторые точки ломаной линии равны.
Например, для замкнутого кольца:

  Point_3 pl[6] =
{Point_3(-100,0,0),
Point_3(40,-70,0),
Point_3(40,50,40),
Point_3(-90,-60,60),
Point_3(0, 0, -100),
Point_3(-100,0,0)
};

Это приводит к

terminate called after throwing an instance of 'CGAL::Assertion_exception'
what():  CGAL ERROR: assertion violation!
Expr: N.is_valid(0,0)
File: /usr/include/CGAL/convex_decomposition_3.h
Line: 141
[1]    30341 done                 cat cube.nef3 |
30342 abort (core dumped)  ./glide

Возврат выглядит так:

0   raise   /usr/lib/libc.so.6      0x7ffff693a369
1   abort   /usr/lib/libc.so.6      0x7ffff693b768
2   __gnu_cxx::__verbose_terminate_handler()    /usr/lib/libstdc++.so.6     0x7ffff7228635
3   ??  /usr/lib/libstdc++.so.6     0x7ffff72267a6
4   std::terminate()    /usr/lib/libstdc++.so.6     0x7ffff72267d3
5   __cxa_throw /usr/lib/libstdc++.so.6     0x7ffff72269fe
6   CGAL::assertion_fail(char const*, char const*, int, char const*)    /usr/lib/libCGAL.so.10      0x7ffff76f9ee9
7   CGAL::convex_decomposition_3<CGAL::Nef_polyhedron_3<CGAL::Epeck, CGAL::SNC_indexed_items, bool> >   convex_decomposition_3.h    141 0x596500
8   CGAL::minkowski_sum_3<CGAL::Nef_polyhedron_3<CGAL::Epeck, CGAL::SNC_indexed_items, bool> >  minkowski_sum_3.h   91  0x59c691
9   main    glide.cpp   35  0x4cbdfb

Возможно, многогранники Неф не допускают пересечения.

Есть ли выход из этого? Помощь действительно очень ценится.

1

Решение

Я спросил разработчиков CGAL, и они ответили, что код не позволяет самопересекающимся полилиниям. Вы должны разделить свои полилинии самостоятельно.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]