2017-05-21 8 views
1

Point_set_2データ構造を使用して、クエリポイントの最近傍点を検索します。近傍のインデックスを取得します。次のコードを使用しましたが、info-がエラーを生成します。 Iはまたthis postを見ているが、私の優先順位は、Point_set_2方法で使用している:CGAL:最近傍の情報を取得

#include <CGAL/Exact_predicates_inexact_constructions_kernel.h> 
#include <CGAL/Delaunay_triangulation_2.h> 
#include <CGAL/Triangulation_vertex_base_with_info_2.h> 
#include <CGAL/Point_set_2.h> 
#include <vector> 

typedef CGAL::Exact_predicates_inexact_constructions_kernel  K; 
typedef CGAL::Triangulation_vertex_base_with_info_2<unsigned, K> Vb; 
typedef CGAL::Triangulation_data_structure_2<Vb>     Tds; 
typedef CGAL::Delaunay_triangulation_2<K, Tds>     Delaunay; 
//typedef Delaunay::Point            Point; 
typedef CGAL::Point_set_2<K,Tds>::Edge_iterator     Edge_iterator; 
typedef CGAL::Point_set_2<K,Tds>::Vertex_handle     Vertex_handle; 
typedef K::Point_2            Point_2; 

CGAL::Point_set_2<K,Tds> PSet; 

int main() 
{ 
    std::vector< std::pair<Point_2,unsigned> > points; 
    points.push_back(std::make_pair(Point_2(0,0),0) ); 
    points.push_back(std::make_pair(Point_2(1,0),1) ); 
    points.push_back(std::make_pair(Point_2(0,1),2) ); 
    points.push_back(std::make_pair(Point_2(14,4),3) ); 
    points.push_back(std::make_pair(Point_2(2,2),4) ); 
    points.push_back(std::make_pair(Point_2(-4,0),5) ); 

    PSet.insert(points.begin(),points.end()); 
    // init 
    Point_2 actual(30,45,10); 
    // nearest neighbor ... 
    Vertex_handle v = PSet.nearest_neighbor(actual); 
    std::cout << "Nearest neighbor:" << v->point() << "\n"; 
    // k nearest neighbors ... 
    std::vector<Vertex_handle> L; 
    std::vector<Vertex_handle>::const_iterator it; 
    PSet.nearest_neighbors(actual,5, std::back_inserter(L)); 
    std::cout << "actual point: " << actual << "\n"; 
    for (it=L.begin();it != L.end(); it++) 
     std::cout << it->info() << "\n"; 
    return 0; 
} 

答えて

0

Vertex_handleポインタのほぼ同等であるが。データメンバーにアクセスするには、逆参照するか、->演算子を使用する必要があります。 ベクトルがVertex_handleの場合、イテレーターはVertex_handle になります。つまり、イテレーターを逆参照してVertex_handleにアクセスする必要があります。 (*it)->info()と書いてください。

おそらく、三角測量のイテレータがハンドル型に暗黙的に変換可能であるという混乱が生じたのかもしれません。