请教算法问题,多边形合并.

1714987765861
如图canvas绘制两个三角形,擦除重叠区域形成新的多边形.
已知原顶点为A1 A2 A3, B1 B2 B3, 算出两个图形的交点做为新增顶点 C D E F G H, 这个顶点集合应该怎么计算顺序 才能画出下面的图形呢.
(仅考虑图形可以用橡皮擦算法擦除相交点的线段实现, 如果需要算出准确的顶点集合里面的顺序呢 应该怎么做)

有一个想法,找到图形的重心,然后用Math.atan2算每个点基于重心的角度,最后按角度排序

(帖子被作者删除,如无标记将在 24 小时后自动删除)

是针对任意多边形的合并吗

我实践试下.

1、计算出单个三角形中顶点与交点顺序集合
2、从单个点出发,沿当前三角形点顺序依次排,碰到交点就更换三角形

比如从A1出发, 怎么得到下一个点呢.

js-angusj-clipper
GitHub - xaviergonz/js-angusj-clipper at 984c5a0e17982cac8b59a3a77171962038f9b2e7

2赞

:+1: 谢谢,我研究研究

你如过实践出了2楼提到的内容,就可以得到单个三角形的点位顺序集合

为了方便描述,将两个多边形分别记为A,B
且构成的顶点按照顺序以此为 A1 A2 A3 。。。 An。 B1 B2 B3 。。。 Bn

初始化。将多边形A的顶点1作为游标,开始算法

repeat
然后取多边形A的边A1A2,然后和多边形B的边做相交判断,取出离这个顶点最近的一个顶点C,以及对应的边B1Bn。
然后从B1B2中,反过来取与多边形A的相交判断,会得到顶点C1C2,此时B1B2会被分割为,B1C1, C1C2, C2B2,三条线段
将A1, C1压入队列

将B1设为游标,重复上述算法(类似的只是互换了多边形),会从多边形A中得到,A2D1,D1D2,D2A3
将B1,D1压入队列,A2设为游标

until 游标回到A1

最后留下的点序列就是新多边形的所有顶点。

另外,这里默认你这里都是凸多边形(凹多边形,此算法应该不适用,没仔细想过)

gpt问的,具体怎么做你可以继续问下,能行的话记得分享下 :joy:
扫描线算法 :扫描线算法是一种常用的方法,通过沿着一个方向扫描多边形,并根据扫描线与多边形的交点来确定多边形的顶点顺序。