我刚刚开始使用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不允许交叉。
有什么方法可以解决这个问题吗?非常感谢帮助。
答案 0 :(得分:0)
我确实问过CGAL开发人员,他们回答说代码不允许自相交折线。您需要自己拆分折线。