CDT C++库:如何定义边



我正在尝试在CDT中定义一条边。下面是我的代码。第一个函数运行良好,但第二个函数的编译会引发以下错误:没有匹配的函数可用于调用CDT::Edge::Edge((。我还尝试了许多其他的试验,但都没有成功。

typedef CDT::V2d<double> Vertex;
typedef CDT::Edge Edge;
typedef CDT::Triangulation<double> Triangulation;
arma::umat Rcpp_delaunay(const arma::mat & points){
Triangulation cdt(CDT::VertexInsertionOrder::AsProvided);
size_t npoints = points.n_rows;
std::vector<Vertex> vertices(npoints);
for (size_t i = 0; i < npoints; ++i) {
const arma::rowvec row_i = points.row(i);
vertices[i] = Vertex::make(row_i(0), row_i(1));
}
cdt.insertVertices(vertices);
cdt.eraseSuperTriangle();
const CDT::TriangleVec triangles = cdt.triangles;
arma::umat out(triangles.size(), 3);
for(size_t i = 0; i < triangles.size(); ++i){
const CDT::VerticesArr3 trgl = triangles[i].vertices;
out(i, 0) = trgl[0];
out(i, 1) = trgl[1];
out(i, 2) = trgl[2];
}
return out;
}
arma::umat Rcpp_constrained_delaunay(
const arma::mat & points, const arma::umat & edges
){
Triangulation cdt(CDT::VertexInsertionOrder::AsProvided);
size_t npoints = points.n_rows;
std::vector<Vertex> vertices(npoints);
for (size_t i = 0; i < npoints; ++i) {
const arma::rowvec row_i = points.row(i);
vertices[i] = Vertex::make(row_i(0), row_i(1));
}
size_t nedges = edges.n_rows;
std::vector<Edge> Edges(nedges);
for (size_t i = 0; i < nedges; ++i) {
const arma::urowvec row_i = edges.row(i);
Edge edge = Edge(row_i(0), row_i(1));
Edges[i] = edge;
}
cdt.insertVertices(vertices);
cdt.insertEdges(Edges);
cdt.eraseOuterTrianglesAndHoles();
const CDT::TriangleVec triangles = cdt.triangles;
arma::umat out(triangles.size(), 3);
for(size_t i = 0; i < triangles.size(); ++i){
const CDT::VerticesArr3 trgl = triangles[i].vertices;
out(i, 0) = trgl[0];
out(i, 1) = trgl[1];
out(i, 2) = trgl[2];
}
return out;
}

Edge没有默认构造函数,因此不能给vector<Edge>一个初始大小(因为这需要初始默认构造每个元素(。相反,首先使向量为空(如果愿意,可以为其提供reserve()容量(,然后将edgepush_back()相加…或者,更好的是,使用emplace_back()将其构建到位。