C++ 轻量级Delaunay三角函数库(用于c+;+;)

C++ 轻量级Delaunay三角函数库(用于c+;+;),c++,geometry,triangulation,cgal,C++,Geometry,Triangulation,Cgal,我想玩一些(2D)Delaunay三角剖分,并正在寻找一个相当小的库来使用。我知道CGAL,但我想知道是否有相当简单和直接的东西 我想做的事情: 创建任意点集的三角剖分 找到任意点所在的三角形,并获取顶点 创建三角剖分的图像(可选) 建议?您可能应该详细说明一下您的目标,以便提供更多相关的答案,但首先让我提到一个2D Delaunay生成工具,它是用C编写的,既可以作为独立程序使用,也可以从您自己的代码中调用 那么,关于CGAL,这里是一个典型的小例子,如果你仍然考虑它: #include

我想玩一些(2D)Delaunay三角剖分,并正在寻找一个相当小的库来使用。我知道CGAL,但我想知道是否有相当简单和直接的东西

我想做的事情:

  • 创建任意点集的三角剖分
  • 找到任意点所在的三角形,并获取顶点
  • 创建三角剖分的图像(可选)

建议?

您可能应该详细说明一下您的目标,以便提供更多相关的答案,但首先让我提到一个2D Delaunay生成工具,它是用C编写的,既可以作为独立程序使用,也可以从您自己的代码中调用

那么,关于CGAL,这里是一个典型的小例子,如果你仍然考虑它:

#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;
  return 0;
}
#包括
#包括
#包括
typedef CGAL::精确谓词不精确结构内核K;
typedef CGAL::Delaunay_三角剖分_2Delaunay;
类型定义K::点2点;
无效荷载点(标准::向量<点>&点)
{
点。向后推(点(1,1.);
点。向后推(点(2,1.);
点。向后推(点(2,2.);
点。向后推(点(1,2));
}
int main()
{
标准::向量<点>点;
荷载点(点);
德洛奈;
插入(points.begin(),points.end());

std::cout我使用了2D Delaunay三角剖分,效果很好。调用有点奇怪,因为它使用了OOP-in-C GLib样式,但很容易实现。

另请参见poly2tri,它看起来很不错:

你需要它作为一个库,还是一个独立的程序可以?一个独立的程序可能不可以。我正在寻找集成将其放入一个更大的软件工具中。谢谢你给我指点三角形。这是一个非常简单易用的方法。这些方法中的任何一种都可以在本机iPad应用程序中使用吗?@AndrewProck你将其用作库吗?因为我找不到任何使用此三角形的代码示例libmain在三角形中。cI不知道你是否可以将CGAL用作library,我真的不知道该链接什么这是针对约束delaunay的,如果使用随机点集,我不确定这是否有效。