找到一个点所属的面/三角形

CGAL: Find face/triangle a point belongs to?

本文关键字:三角形 一个      更新时间:2023-10-16

看了之后,我得出了这个结论:

#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 >& points)
{
  points.push_back(Point(1., 1.));
  points.push_back(Point(2., 1.));
  points.push_back(Point(2., 2.));
  points.push_back(Point(1., 2.));      
}
int main()
{
  std::vector< Point > points;
  load_points(points);
  Delaunay dt;
  dt.insert(points.begin(), points.end());
  std::cout << dt.number_of_vertices() << std::endl;
  typedef std::vector<Delaunay::Face_handle> Faces;
  Faces faces;
  std::back_insert_iterator<Faces> result( faces );
  result = dt.get_conflicts ( Delaunay::Point(1.5, 1.5),
                                std::back_inserter(faces) );
  return 0;
}

应该找到其圆包含该点的面。之后,我必须使用这些三角形并使用一种方法来测试点是否在它们内部(我认为CGAL会这样做吗?我知道这很容易实现)。

不管怎样,我怎样才能把三角形从脸上去掉呢?

回答是

CGAL::Triangle_2<K> f = dt.triangle(faces[0]);
std::cout << dt.triangle(faces[0]) << std::endl;
std::cout << dt.triangle(faces[1]) << std::endl;

我不知道如何很好地使用三角形类,但至少这是一个开始。

我本来要写一个实际的答案但是stackoverflow不允许我这么做

您应该使用在这里可以找到文档的locate成员函数