我知道那里有有效的多边形裁剪算法(例如,Maillot,Vatti,Greiner-Hormann)。然而,这些算法适用于任意多边形,虽然它们适合我的情况,但在我看来,对于像我这样的简单案例使用这种通用算法是一种过度杀伤。
我所拥有的是两个二维三角形(见下图),我想将它们夹在另一个上。除了一般的多边形裁剪算法之外,在网上搜索还没有找到任何东西。
问:是否有专门的裁剪两个2D三角形的算法?
答案 0 :(得分:2)
对于两个凸形,传统方法只是Sutherland Cohen,但标记更多或更少。
E.g。在你的情况下:
从A:
开始(*或OR他们;我们已经确定他们没有共同点,因此它没有任何区别 - 我认为XOR在说你正在寻找差异时更具描述性)
答案 1 :(得分:2)
描述了两种对凸多边形有效的方法here - Hoey算法和O'Rourke算法。
(我用O'Rourke的一个用于凸四边形)
答案 2 :(得分:1)
只是提示优化。
关于哪些边相交以及哪些顶点属于最终轮廓的完整讨论仅取决于由一个三角形(A)的顶点和另一个三角形的边(B)形成的三角形的代数区域。
有9个这样的三角形,因此有9个区域和9个标志。无论如何,使用(A)的相同顶点构建的三个三角形具有与(B)的面积相加的面积,并且仅需要完全计算9-3 + 1 = 7个面积。
此外,两个边之间的交点是使用像t = S /(S-S')之类的公式从两个区域计算出来的,其中t是沿边的参数。
因此,可以将完全展开的算法写为深度为9的决策树(使用9个带符号的区域),每个叶子(其中512个!)生成一系列顶点/交叉点。最糟糕的是可能有6个交叉路口。