いくつかの点で Delaunay 三角形分割があり、その中のすべてのエッジを長さの昇順で反復処理して、最小スパン スレッドを構築したいと考えています。
次のアプローチを試しましたが、コンパイルできません。
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Delaunay_triangulation_2<K> T;
typedef K::Point_2 P;
typedef T::Vertex_handle Vh;
typedef T::Vertex_iterator Vi;
typedef T::Edge_iterator Ei;
bool sortFunction (Ei a, Ei b) {
K::FT la, lb;
la = CGAL::squared_distance(a.source().point(), a.target().point());
lb = CGAL::squared_distance(b.source().point(), b.target().point());
return la < lb;
}
...
T g;
...
std::vector<Ei> edges;
for (Ei ei = g.edges_begin(); ei != g.edges_end(); ei++) {
edges.push_back(ei);
}
std::sort(edges.begin(), edges.end(), sortFunction);
...
のメンバーではないsortFunction
と言って、コンパイルは で失敗します。ただし、ドキュメントはここで私を混乱させます。source
Edge_iterator
CGAL のドキュメントによると、エッジ イテレータの値の型はハーフエッジです。
ポイントにアクセスして使用できるsource()
と言われています。target()
しかし、そうではないようです。私はここで何を台無しにしていますか?