我刚刚开始使用 CGAL 计算沿折线的 minkowski 和 - 基本上是“滑行”操作。这里有一个很好的例子:
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
可能,Nef Polyhedra 不允许相交。
有没有办法解决这个问题?非常感谢您的帮助。