2012-03-13 34 views
5

मेरे पास एक संबंधित आईडी के साथ 2 डी अंक का एक सेट है। (उदाहरण के लिए यदि अंक किसी सरणी में संग्रहीत होते हैं, तो आईडी प्रत्येक बिंदु 0, ...., n-1 में अनुक्रमणिका है)।सीजीएएल 2 डी डेलाउने त्रिकोण: वर्टेक्स आईडी जोड़े के रूप में किनारों को कैसे प्राप्त करें

अब मैं इन बिंदुओं का एक डेलाउने त्रिकोण बना रहा हूं और सभी परिमित किनारों को सूचीबद्ध करना चाहता हूं। प्रत्येक किनारे के लिए, मैं संबंधित 2 शीर्षकों द्वारा दर्शाए गए बिंदुओं के आईडी प्राप्त करना चाहता हूं। उदाहरण: यदि बिंदु 0 और बिंदु 2 के बीच किनारे है तो (0,2)। क्या यह संभव है?

#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) 
{ 
    } 
} 

उत्तर

7

सबसे पहले आप these examples में के रूप में जानकारी के साथ एक शीर्ष प्रकार का उपयोग करने की जरूरत है। फिर एक किनारा एक जोड़ी है जिसमें चेहरे पर एक हैंडल होता है और साथ ही चेहरे में कशेरुक की अनुक्रमणिका होती है जो कि किनारे के विपरीत होती है।

यदि आपके पास:

Delaunay::Edge e=*it; 

सूचकांक आप देख रहे हैं कर रहे हैं:

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

sloriot: बहुत उपयोगी। धन्यवाद। – 911

+0

तो साफ़ करें! धन्यवाद। – LoveMeow