В настоящее время я участвую в трехмерной триангуляции с использованием 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;
}