2012-03-13 21 views
5

Tôi có một tập hợp các điểm 2D với một id liên quan. (ví dụ: nếu các điểm được lưu trữ trong một mảng, id là chỉ mục vào mỗi điểm 0, ...., n-1).CGAL 2D Delaunay Triangulation: Làm thế nào để có được các cạnh như cặp id đỉnh

Bây giờ tôi tạo một tam giác Delaunay của những điểm này và muốn liệt kê tất cả các cạnh hữu hạn. Đối với mỗi cạnh, tôi muốn có các id của các điểm được đại diện bởi 2 đỉnh tương ứng. Ví dụ: nếu có một cạnh giữa điểm 0 và điểm 2 thì (0,2). Điều này có thể không?

#include <vector> 
#include <CGAL\Exact_predicates_inexact_constructions_kernel.h> 
#include <CGAL\Delaunay_triangulation_2.h> 

typedef CGAL::Exact_predicates_inexact_constructions_kernel K; 
typedef CGAL::Delaunay_triangulation_2<K> Delaunay; 
typedef K::Point_2 Point; 

void load_points(std::vector<Point>& rPoints) 
{ 
    rPoints.push_back(Point(10,10)); // first point 
    rPoints.push_back(Point(60,10)); // second point 
    rPoints.push_back(Point(30,40)); // third point 
    rPoints.push_back(Point(40,80)); // fourth point 
} 

void main() 
{ 
std::vector<Point> points; 
load_points(points); 

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

for(Delaunay::Finite_edges_iterator it = dt.finite_edges_begin(); it != dt.finite_edges_end(); ++it) 
{ 
    } 
} 

Trả lời

7

Trước tiên, bạn cần sử dụng loại đỉnh có thông tin như trong these examples. Sau đó, một cạnh là một cặp có chứa một tay cầm cho một khuôn mặt cũng như chỉ số của đỉnh ở mặt đối diện với cạnh.

nếu bạn có:

Delaunay::Edge e=*it; 

chỉ số bạn đang tìm kiếm là:

int i1= e.first->vertex((e.second+1)%3)->info(); 
int i2= e.first->vertex((e.second+2)%3)->info(); 
+0

sloriot: rất hữu ích. cảm ơn. – 911

+0

Rất rõ ràng! cảm ơn bạn. – LoveMeow