CGAL:沿着交叉折线的minkowski和

时间:2014-01-25 15:17:43

标签: c++ cgal polyhedra

我刚刚开始使用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不允许交叉。

有什么方法可以解决这个问题吗?非常感谢帮助。

1 个答案:

答案 0 :(得分:0)

我确实问过CGAL开发人员,他们回答说代码不允许自相交折线。您需要自己拆分折线。