C++ 多边形操作-如何对找到的顶点排序

C++ 多边形操作-如何对找到的顶点排序,c++,geometry,polygon,operation,C++,Geometry,Polygon,Operation,我有两个凹多边形的输入表示为两个向量的点。我想对它做一些多边形运算——并、交、差。我找到了这些多边形之间的交点,并将它们插入到每个多边形的正确位置。然后我给每个顶点一个关于它的位置的信息(内部-它在另一个多边形内,外部-它在另一个多边形外,交点,多边形的两条边相交的地方)。现在我知道哪些点创建了这些多边形的并集(外部和相交)等等,但我需要知道如何将它们排序到正确的顺序。在交叉操作的情况下,我需要将这些排序的点划分为正确数量的集合,因为交叉的结果可能是多个多边形 我使用C++,但我不需要代码,我只

我有两个凹多边形的输入表示为两个向量的点。我想对它做一些多边形运算——并、交、差。我找到了这些多边形之间的交点,并将它们插入到每个多边形的正确位置。然后我给每个顶点一个关于它的位置的信息(内部-它在另一个多边形内,外部-它在另一个多边形外,交点,多边形的两条边相交的地方)。现在我知道哪些点创建了这些多边形的并集(外部和相交)等等,但我需要知道如何将它们排序到正确的顺序。在交叉操作的情况下,我需要将这些排序的点划分为正确数量的集合,因为交叉的结果可能是多个多边形

我使用C++,但我不需要代码,我只想知道如何排序这些最终多边形点。我不想为这些操作使用任何库,因为我已经有了自己的函数,并且想使用它们

我看了这个问题和其他一些问题,但没有一个是解决最终的排序问题。 我也读过这篇文章,但我可能不明白


任何帮助都将不胜感激。

如果您遵循我的评论中的所有建议:

  • 区分交叉点和接触点
  • 在两个多边形中的两个等价交点之间保持链接
联合体的解决方案是:

  • 仅考虑外部、接触点和交点
  • 确保两个多边形中的点按不同的方向排列(其中一组为顺时针方向,另一组为逆时针方向)
  • 从任意两个多边形中的任意点开始
  • 对于任意两个多边形中的每个顶点,如果您访问过,请保留该顶点
  • 每次遇到交点时,请继续从另一个多边形中的下一个跟随点(位于该交点之后)进行遍历
  • 如果回到起点,将关闭两个多边形连接的一个组件。如果没有遍历所有顶点,则从任何未访问的顶点重复整个过程
  • 最后,计算您找到的所有多边形的面积。面积最大的将是真正的工会。剩下的将是工会中的漏洞
  • 连接的解决方案是:

  • 只考虑内部点和交点
  • 确保两个多边形中的点按相同的方向排列
  • 从任意两个多边形中的任意点开始
  • 对于任意两个多边形中的每个顶点,如果您访问过,请保留该顶点
  • 每次遇到交点时,请继续从另一个多边形中的下一个跟随点(位于该交点之后)进行遍历
  • 如果回到起点,将关闭两个多边形连接的一个组件。如果没有遍历所有顶点,则从任何未访问的顶点重复整个过程
  • 编辑:正如我已经提到的,我感觉我的多边形方向方法需要修改。然而,当我在网上搜索时,我发现了一个算法描述,它可能会为您提供帮助:


    EDIT2描述这种剪辑算法。

    如果您遵循我的评论中的所有建议:

    • 区分交叉点和接触点
    • 在两个多边形中的两个等价交点之间保持链接
    联合体的解决方案是:

  • 仅考虑外部、接触点和交点
  • 确保两个多边形中的点按不同的方向排列(其中一组为顺时针方向,另一组为逆时针方向)
  • 从任意两个多边形中的任意点开始
  • 对于任意两个多边形中的每个顶点,如果您访问过,请保留该顶点
  • 每次遇到交点时,请继续从另一个多边形中的下一个跟随点(位于该交点之后)进行遍历
  • 如果回到起点,将关闭两个多边形连接的一个组件。如果没有遍历所有顶点,则从任何未访问的顶点重复整个过程
  • 最后,计算您找到的所有多边形的面积。面积最大的将是真正的工会。剩下的将是工会中的漏洞
  • 连接的解决方案是:

  • 只考虑内部点和交点
  • 确保两个多边形中的点按相同的方向排列
  • 从任意两个多边形中的任意点开始
  • 对于任意两个多边形中的每个顶点,如果您访问过,请保留该顶点
  • 每次遇到交点时,请继续从另一个多边形中的下一个跟随点(位于该交点之后)进行遍历
  • 如果回到起点,将关闭两个多边形连接的一个组件。如果没有遍历所有顶点,则从任何未访问的顶点重复整个过程
  • 编辑:正如我已经提到的,我感觉我的多边形方向方法需要修改。然而,当我在网上搜索时,我发现了一个算法描述,它可能会为您提供帮助:


    EDIT2描述这种裁剪算法。

    如何定义交点(您说您已经定义了它们)?接触点会是交点吗?我把接触点定义为交点,但我可以理解