【问题标题】:Efficient 2D triangle-triangle subtraction, removing one triangle from another, returning the remainder as triangles高效的 2D 三角形-三角形减法,从另一个三角形中删除一个三角形,将余数返回为三角形
【发布时间】:2020-09-05 04:37:52
【问题描述】:

我有兴趣编写一个我自己的函数,该函数从另一个 2D 三角形中减去一个,并将余数作为一个三角形的 n 数组返回。 (不使用现有的几何库)

输入和输出的两个例子,三角形编号,顺序不重要。


虽然我对这类算法比较熟悉,但这似乎是一个足够普遍的问题,可能已经编写了一个已知的强大解决方案(如果没有,我可能会考虑编写一个作为这个问题的答案)

【问题讨论】:

  • 我不清楚问题是什么。您是否要求提供多边形剪裁文献、示例代码或可以进行多边形剪裁的库的链接?例如,CGAL 就包含了这样的功能,它使用了 nef 多边形的思想。
  • 如果蓝色三角形是:与红色三角形完全相同(只是按比例缩小)并位于红色三角形的中间,会发生什么?
  • @paul-hankin 我对示例代码或显示经过验证的真实方法的论文感兴趣,例如stackoverflow.com/a/40902741/432509
  • @goozzi 它将用三角形填充该区域,我没有包括所有可能的情况,但是数量有限,这应该是一个相当简单的可解决问题。 (我为什么要在这里问)。
  • 本主题属于 CSG(constructive solid geomtry)操作组。 99% 的案例通常可以直接实施。然而,最后的 1% 非常糟糕,包含各种极端情况,如非流形输出、浮点精度导致的不一致决策等。您的稳健性要求是什么?如果你需要一些健壮的东西,我会建议一个成熟的 CSG 库(我没有想到,但应该有一些)。

标签: algorithm geometry 2d csg


【解决方案1】:

我最近在研究这个问题并解决了它。

我试图描述分层的所有可能性,我做到了。 按递减三角形中的递减三角形和递减递减的递减点的点数分类有16例。 对于减法中的信息 a - b = c,a 是 dimunende,b 是小数,c 是差异。 在减法表中,递减的三角形用蓝色表示,而递减的三角形用红色表示,在每个框的右下角表示每个三角形包含在另一个中的点。差的三角形数量在每个框的左上角,最后是左下角的红色交叉点的数量。

我的方法包括计算三角形内的交点和点。在某些情况下,我们还必须通过相交检测或检查它是否不包含点来确定三角形的有效性。最后我想,我相信,我设法解决了这个问题。

查看此论坛以获取代码源和更多信息: https://gb32.proboards.com/post/2112/thread

【讨论】:

  • 你能内联引用吗? - 外部链接经常中断,在这种情况下需要登录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-10
  • 2011-03-29
  • 2014-01-21
  • 2018-02-11
  • 1970-01-01
相关资源
最近更新 更多