所以我有以下内容应该为CGAL创建一个Delaunay三角形类型:
std::vector<Point> points = createPoints() // Fills points, This works.
Delaunay dt(points.begin(), points.end());
根据this问题和手册here。这应该有效,但是我收到以下错误:
[100%] Building CXX object src/utilities/TriangulationVolumeCalculation/CMakeFiles/calculateVolumeDifference.dir/CalculateVolumeDifference.cpp.o
/home/uqbdart/SMG/sao2/src/utilities/TriangulationVolumeCalculation/CalculateVolumeDifference.cpp: In function ‘void fillDelaunay(Delaunay&, std::vector<std::vector<double> >)’:
/home/uqbdart/SMG/sao2/src/utilities/TriangulationVolumeCalculation/CalculateVolumeDifference.cpp:31:37: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
/home/uqbdart/SMG/sao2/src/utilities/TriangulationVolumeCalculation/CalculateVolumeDifference.cpp: In function ‘int main(int, char**)’:
/home/uqbdart/SMG/sao2/src/utilities/TriangulationVolumeCalculation/CalculateVolumeDifference.cpp:50:27: error: no matching function for call to ‘CGAL::Delaunay_triangulation_2<CGAL::Projection_traits_xy_3<CGAL::Epick> >::Delaunay_triangulation_2(std::vector<CGAL::Point_3<CGAL::Epick> >::iterator&, std::vector<CGAL::Point_3<CGAL::Epick> >::iterator&)’
/home/uqbdart/SMG/sao2/src/utilities/TriangulationVolumeCalculation/CalculateVolumeDifference.cpp:50:27: note: candidates are:
In file included from /home/uqbdart/SMG/sao2/src/utilities/TriangulationVolumeCalculation/CalculateVolumeDifference.cpp:3:0:
/usr/local/include/CGAL/Delaunay_triangulation_2.h:89:3: note: CGAL::Delaunay_triangulation_2<Gt, Tds>::Delaunay_triangulation_2(const CGAL::Delaunay_triangulation_2<Gt, Tds>&) [with Gt = CGAL::Projection_traits_xy_3<CGAL::Epick>; Tds = CGAL::Triangulation_data_structure_2<CGAL::Triangulation_vertex_base_2<CGAL::Projection_traits_xy_3<CGAL::Epick>, CGAL::Triangulation_ds_vertex_base_2<void> >, CGAL::Triangulation_ds_face_base_2<void> >]
/usr/local/include/CGAL/Delaunay_triangulation_2.h:89:3: note: candidate expects 1 argument, 2 provided
/usr/local/include/CGAL/Delaunay_triangulation_2.h:86:2: note: CGAL::Delaunay_triangulation_2<Gt, Tds>::Delaunay_triangulation_2(const Gt&) [with Gt = CGAL::Projection_traits_xy_3<CGAL::Epick>; Tds = CGAL::Triangulation_data_structure_2<CGAL::Triangulation_vertex_base_2<CGAL::Projection_traits_xy_3<CGAL::Epick>, CGAL::Triangulation_ds_vertex_base_2<void> >, CGAL::Triangulation_ds_face_base_2<void> >]
/usr/local/include/CGAL/Delaunay_triangulation_2.h:86:2: note: candidate expects 1 argument, 2 provided
make[2]: *** [src/utilities/TriangulationVolumeCalculation/CMakeFiles/calculateVolumeDifference.dir/CalculateVolumeDifference.cpp.o] Error 1
make[1]: *** [src/utilities/TriangulationVolumeCalculation/CMakeFiles/calculateVolumeDifference.dir/all] Error 2
make: *** [all] Error 2
手册指出:
Precondition: The value_type of first and last is Point.
第一个和最后一个是开始和结束迭代器。
编辑:我这样解决了这个问题:Delaunay dt;
dt.insert(points.begin(), points.end());
虽然它已修复,但根据手册,所需迭代器的类型声明是相同的。为什么它会在构造函数中失败而不在insert
函数中失败。
答案 0 :(得分:2)
任何机会,你会使用旧的CGAL版本吗?如果内存对我有好处,那么来自范围的这个构造函数比insert()函数引入得晚。好吧,只需检查代码。
答案 1 :(得分:1)
问题可能是您的班级Point
没有必要的方法成为Delaunay_triangulation_2
的模板参数(我猜您曾经用来定义班级Delaunay
)
班级Delaunay
和Point
的定义是什么?
有用的例子可以在这里找到: http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Triangulation_2/Chapter_main.html