简单多边形的三角剖分相关技术

Ben Discoe,2001年2月11日的笔记,更新至2009年1月

我需要一些镶嵌多边形的代码,可以集成到VTP图书馆,具有以下理想的特征:

  • 轻便的
  • 不依赖大型外部库
  • 免费(没有限制性许可)
  • 在C/C++中
  • 使用方便
  • 优选地,处理多边形中的“洞”

以下是我找到的每个选项。

  1. 计算机图形学
    • 包含能够镶嵌的功能(在glu库中)
    • 问题:需要注册6个回调函数的复杂系统
    • 问题:不好用,红宝书里没有示例代码
    • 问题:具有较大的外部依赖性(OpenGL,具有有效的上下文)
    • 提取臀肌功能SGI OpenGL示例实现
      • 一个开发者已经做到了这一点,并说“这非常容易”,这似乎相当令人惊讶!
    • 瓦莱里·莫亚在2009年7月写道:
      • “我写了自己的glu tesselator。从回调中抓取镶嵌并不困难,也不需要太多代码就能工作。(事实上,我只注册了两个回调函数:GLU_TESS_BEGIN和GLU_TESS_VERTEX。)在我的试验中,我能够从构成我想要镶嵌的多边形轮廓的vert列表中获得镶嵌(没有重叠边,但允许定义为逆时针vert列表的孔)。“困难”的部分是,你需要处理得到三角形顶点的三角形、三角形扇形和三角形条带顺序,但这并不像听起来那样糟糕。
      • 瓦尔的代码:glu_tesselation.c
  2. 基于Seidel算法的快速多边形三角剖分(1995)
    • 有C代码吗
    • 问题:小型Unix依赖(%3Csys/time.h%3E),调用非标准stdlib函数“log2”
    • 问题:在函数add_segment()中,使用了一个未经初始化的变量——即它是有问题的代码
    • 问题?1995年写的自述说“仅供非商业使用”
      • 作者Atul Narkhede从CMU来到SGI,他在一个更新的网站上将代码称为“公共领域”,所以最新的状态显然是非限制性的
    • 2008年,收到一封邮件从另一个尝试代码的人那里,他发现代码错误太多
  3. 高效多边形三角剖分约翰·w·拉特克利夫对flipcode
    • C++代码,很小很好用!
    • 使用STL,但是这种依赖性很容易消除
    • 用我自己的数据测试过,效果很好。将其添加到vtdata
    • 只有一个问题:不处理漏洞(也没有声称)
  4. 凝胶渗透色谱(Gel Permeation Chromatography的缩写)
    • 除了三角剖分之外,还进行裁剪和布尔运算
    • 问题:据报道“使用了一个简单的梯形分解,引入了许多t型连接”
    • 问题:禁止性许可限制了使用
  5. “三角形”经过乔纳森·休楚克
    • 可以生成Delaunay三角剖分,这对于某些目的来说显然具有令人满意的特征,但是对于一般情况来说有点过了。对于我们更简单的情况,它可以产生“约束的Delaunay”,这意味着没有无关的三角形。
    • 支持孔!
    • Source是免费和可移植的,只有一个源文件(triangle.c ),这使得它易于集成。
    • 一个小缺点是:你不能只告诉它哪些部分是你的洞的边缘。相反,您必须提供位于孔内的某个点。三角测量这个洞,然后进行某种“洪水填充”来清空它。这是低效的,但更糟糕的是,它要求调用者为这个洞计算多边形中的点。对于任意复杂的多边形,这是一个不平凡的算法。
    • 在2008.01中,我用包装器修改了三角形代码,以便从vtlib中调用它。对于大量的多边形,这种方法非常有效。然而,在一些(罕见的)退化几何体的情况下,它会崩溃。特别是:
      1. 它不喜欢重复的顶点或重复的边。在这种情况下,“重复”是相对于数字精度而言的:对于一个10-100米大小的建筑,两个顶点相距8厘米以内,定义了一条非常短的边,会导致三角形崩溃。
      2. 它不喜欢多边形中的一个洞(内环)与外环中的一个洞(崩溃)具有相同位置的顶点。
  6. 陆地齿轮
    • 一个包含Seidel算法的Narkhede实现的清理版的免费库(如上图)?不,也许早在2001年就有了,但是从2007年开始,它包含了调用“三角形”的代码。这实际上是一个很好的调用三角形的示例代码。
  7. Panda3d
    • 迪士尼VR小组使用的一个巨大的免费软件堆栈,其中包括改编自“Narkhede A .和Manocha D,基于Seidel算法的快速多边形三角剖分算法”的三角剖分
    • 三角测量被深埋在其代码的C++部分,在大量python、tcl、跨平台抽象和用于构建定制构建工具的定制构建工具之下!
    • 在2008.01.30,我将“三角测量”模块从Panda中取出,使其独立,并运行提供的测试(test_tri.cxx)。它崩溃了,数组索引为负。
    • 我还花了3个小时尝试构建Panda本身(禁用了包括Python在内的大多数依赖项。)没有运气,就是太复杂了。
    • 有一些暗示说熊猫版的纳卡德-马诺查可能会被清理或修复。然而,由于它在Panda之外的一个简单测试中崩溃了(对我来说),这并不令人鼓舞。
    • 出发地:塞巴斯蒂安·贝尔特mailto:sbrt@yahoo.fr]
      发送时间:2008年2月1日星期五上午12点56分
      我假设你在CVS上使用的是最新版本(3周前提交的),对吗?http://panda 3d . CVS . SourceForge . net/panda 3d/panda/src/math util/triangulator . cxx?修订版= 1.5 &视图=标记
      论坛上的帖子提到了一些修复...
  8. Poly2Tri(梁/基特尔曼,2005)
    • 使用单调多边形和扫描线算法的细分,O(n log n)时间和O(n)存储
    • 支撑着洞,做了很多很细的三角形。
    • 它比较了Poly2Tri与其他一些三角剖分实现的速度,并声称速度更快,尽管生成的三角形非常细。
    • 另一个开源实现可从PolygonTriangulator.cxx(google it),作者Thomas Kittelmann说它改编自吴亮(2005)的实现,该实现似乎是“LXR地图集”项目的一部分
  9. poly2tri(梅森格林?,2009-)

    • 说它是“基于论文”约束Delaunay三角剖分的扫描线算法作者:v .多米特尔和b .扎利克"
    • 处理孔。
    • BSD许可证。生活在谷歌代码上。
    • 我是2011-07-19评估的。它设法细化了一些输入,这是休楚克的三角形所不能做到的。然而,它仍然在一些输入上崩溃,比如右边的多边形。请再次注意多边形的一个洞(内环)是如何精确地接触到外环的。该算法似乎认为这是退化的(甚至不检测它以避免崩溃),但不幸的是,这是一个常见的形状。
  10. 水运工程岩土勘察规范

其他人

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值