2016-06-23 6 views
0

В настоящее время я участвую в трехмерной триангуляции с использованием CGAL, и до сих пор мне удалось создать правильный тетраэдр, вставив и триангулируя 4 вершины. Но когда я пытаюсь пересечь края тетраэдра и получить вершины, соответствующие этому ребру, я получаю начало координат как вершину или дубликаты предыдущих ребер. В 2D все работает отлично, но в 3D-вещах все идет не так. Я думаю, что это связано с включением бесконечной/неопределенной вершин, но я не знаю, как с этим справиться. Любая помощь будет оценена по достоинству.CGAL Итератор края триангуляции включает в себя исходный код

Мой код (редактировался this question):

#include <vector> 
#include <iostream> 
#include <cmath> 
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h> 
#include <CGAL/Delaunay_triangulation_3.h> 

typedef CGAL::Exact_predicates_inexact_constructions_kernel K; 
typedef CGAL::Delaunay_triangulation_3<K> Delaunay; 
typedef K::Point_3 Point; 

void load_points(std::vector<Point>& rPoints) 
{ 
    rPoints.push_back(Point(1.0, 0.0, -1.0/sqrt(2))); // first point 
    rPoints.push_back(Point(-1.0, 0.0, -1.0/sqrt(2))); // second point 
    rPoints.push_back(Point(0.0, 1.0, 1.0/sqrt(2))); // third point 
    rPoints.push_back(Point(0.0, -1.0, 1.0/sqrt(2))); // fourth point 
} 

int 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) 
{ 
    Point i1= it->first->vertex((it->second+1)%3)->point(); 
    Point i2= it->first->vertex((it->second+2)%3)->point(); 
    std::cout << "i1: " << i1 << "\t i2: " << i2 << "\n"; 
    } 

    return 0; 
} 

ответ

1

Документация для edge указывает, что это тройка: (с, I, J) является краем ячейки с вершины которого индексы я и к.

Так что в вашем коде, вы должны написать:

Точка i1 = it-> первого> вершина (it-> второй) -> пункт(); Point i2 = it-> первая-> vertex (it-> third) -> point();