GC友好凸剪裁(并集和差分)算法

时间:2017-10-21 23:43:56

标签: javascript algorithm garbage-collection geometry clipping

我正在寻找能够根据另一个凸多边形切割凸多边形的算法。这将是可破坏的地形(差异)以及在游戏中的2D地图中创建地形(联合)。

算法必须是垃圾收集器友好的,并且唯一需要的布尔操作是Union&差。

我做过一些研究并且有一些github项目,但是所有这些项目或多或少产生了一些垃圾。

https://github.com/tmpvar/2d-polygon-boolean

https://github.com/w8r/GreinerHormann

我想最好的解决方案是学习其中的一个并重新制作它。但也许您已经听说过一些适合我需求的东西?

感谢。

1 个答案:

答案 0 :(得分:1)

此问题涉及两个子问题

  1. 找到两个轮廓之间的交叉点

  2. 加入要加入的顶点。

  3. 对于1.你可以利用凸性:将两个多边形视为两个单调链。当你同时移动两个多边形链时,比如通过增加x,当纵坐标在两个横坐标之间相互交叉时,就会检测到交叉点。

    对于2.注意,在每个截面点处,在一个多边形和另一个多边形之间交替的轮廓部分由联合或差异构成。

    请注意,如果存在差异,可能会有多个断开的部分。

    enter image description here

    我想你可以在没有任何分配/释放的情况下实现它(但对于输出多边形)。