轻量级 Delaunay 三角剖分库(用于 c++)

22

我想尝试一下(2D)德劳内三角剖分,并寻找一个相对较小的库来使用。我知道CGAL,但我想知道是否有其他比较简单和直接的选择。

我想要做的事情:

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

有什么建议吗?


你需要它成为一个库,还是独立的程序也可以? - Camille
一个独立的程序可能不太好。我想将其集成到一个更大的软件工具中。 - Andrew Prock
3个回答

12

你可能需要更详细地说明你的目标,以便提供更相关的答案,但让我先提一下Triangle,这是一个用C语言编写的二维Delaunay生成工具,既可以作为独立程序使用,也可以从你自己的代码中调用。

接下来关于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;
}

1
谢谢您指引我使用Triangle。它非常直观易用。 - Andrew Prock
这些方法中是否有任何一种可以用于原生的iPad应用程序? - Andre
主函数在triangle.c文件中。 - Andrew Prock
我在使用Triangle包与VS2012 C++ x64时遇到了问题。我生成了triangle.o文件,并将triangle.c和triangle.h插入到我的项目中。但是我得到了大量的错误。通常应该如何设置它?这个包与VS2012 X64兼容吗? - Nick X Tsui
你知道我应该做哪些更改才能让Triangle在VS2012中运行吗?现在,我已经开始了一个新项目并插入了triangle.c、triangle.h、tricall.c,但是当我编译时,出现了大量错误。 - Nick X Tsui
显示剩余2条评论

3

这是针对约束德劳内的,如果您使用随机点集,我不确定这是否有效。 - jokoon

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接