从两条相交的路径中获取三条合成路径

时间:2015-10-14 18:26:41

标签: algorithm geometry shape geometry-surface

我在xy平面上有两条相交的路径,请参见图片。 enter image description here

路径由一组点按顺序定义,以便每两个连续点形成路径边缘。路径始终关闭。标记的点表示它们是来自边缘还是曲线。 我正在尝试编写一个函数来获得三条路径,如下所示。 enter image description here

我尝试了以下内容。

create temp path Object path_C
go through every edge in path_A
    go through every edge in path_B
        if current edge of path_A intersects edge of path_B
        find the intersection
        store the intersection point in path_C
    inner loop ends here
outer loop ends here
go through every point in path_A
   if a point lies within the path_B 
   add it to the path_C
   and remove it from path_A 
end of loop
go through every point in path_B
   if a point lies within the path_A 
   add it to the path_C
   and remove it from path_B
end the loop  

在我运行它之前,我的一位朋友指出,无法保证path_C的点数正确。现在我无法弄清楚如何解决这个问题。 如果你能提出一些更好的优化建议。

旁注:我实际上是尝试在adobe illustrator的路径查找器面板中实现划分功能。

1 个答案:

答案 0 :(得分:0)

您要查找的术语是“图形循环”,请查看此堆栈溢出线程:finding all cycles in graph。基本上你想从两条路径构建一个图形。这是通过连接两个路径(带来所有边和顶点),并在每个交叉点引入新顶点来完成的。交点是图形合并的位置。在实现过程中,考虑所有边缘情况,即交叉点可能发生在通过顶点的边缘,共线边缘/顶点等之间。还要注意,对于某些形状,例如U形和矩形,可以产生几个周期。