1

所以我有以下应该为 CGAL 创建一个 Delaunay 三角形类型:

std::vector<Point> points = createPoints() // Fills points, This works. 
Delaunay dt(points.begin(), points.end());

根据这个问题和手册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.

其中 first 和 last 是开始和结束迭代器。

编辑:我通过这样做解决了它:

Delaunay dt;
dt.insert(points.begin(), points.end());

虽然它是固定的,但根据手册,所需迭代器的类型声明是相同的。为什么它会在构造函数中失败而不是在insert函数中。

4

2 回答 2

2

无论如何,您会使用旧版本的 CGAL 吗?如果我没记错的话,这个 range 中的构造函数是在 insert() 函数之后引入的。好吧,只需检查代码。

于 2013-06-13T05:06:45.930 回答
1

问题可能是您的类Point没有作为模板参数所需的方法Delaunay_triangulation_2(我猜您曾经定义过该类Delaunay

Delaunay和的定义是什么Point

有用的例子可以在这里找到: http ://www.cgal.org/Manual/latest/doc_html/cgal_manual/Triangulation_2/Chapter_main.html

于 2013-06-13T04:17:30.210 回答