2D三角形和正方形之间的三角形裁剪

时间:2015-12-16 23:05:36

标签: geometry polygon intersection triangulation

我正在尝试实现这里描述的贴花网格生成器:http://blog.wolfire.com/2009/06/how-to-project-decals/。该博客提出了一种三角形和正方形之间的交叉多边形三角剖分算法:

  

首先,我们可以一次从一个边框开始。我们选择左边   边界。要裁剪三角形,我们首先标记每个顶点   违反规则 - 在这种情况下,最左边的一个。然后我们看   在标记的顶点和未标记的顶点之间的每一行,并添加   在它穿过边界的点处的顶点。

     

然后我们可以简单地删除标记的顶点(或顶点),然后移动   到下一个边境。

     

一旦我们检查了所有边框,我们就会有一个裁剪的三角形!

我在纸上尝试了这种算法,它似乎并不涵盖所有情况。似乎它的描述缺少一些我错过的关键细节。有人可以发布伪代码实现吗?

编辑:更具体地说,我不清楚的部分是算法如何能够确定(黑线)之间的正确“切割”enter image description here

enter image description here

当有多种选择时。

其次,为什么算法不能在多边形的顶点和图2中的左下角之间进行切割?该算法表明“我们看 在标记的顶点和未标记的顶点之间的每一行,并添加 在它穿过边界的点处的顶点“,左下角是不是没有标记的顶点?

1 个答案:

答案 0 :(得分:1)

推导算法的一种可靠方法是考虑交叉三角形和半平面的问题。

首先确定顶点是否在半平面内或外。这导致8个配置:一个使得整个三角形被丢弃,一个使得它保持不变,三个使得它被裁剪成四边形而三个使得它被裁剪成另一个三角形。

如果是四边形,则通过对角线将其分成两部分。

在此步骤之后,您剩下0,1或2个三角形,并且您只需在每个三角形的下一个剪切半平面上重复该操作。防弹。

enter image description here

如果三角形很大并且经常被夹在几个边上(我怀疑),你可以考虑与两个半平面相交,一次形成一个条纹。有27种情况,输出由0到3个子三角形组成。这可以节省一些比较和交叉计算。

通过矩形直接剪裁看起来很复杂。