Algorithm 从线数据获取区域的算法(CAD填充算法)

Algorithm 从线数据获取区域的算法(CAD填充算法),algorithm,cad,Algorithm,Cad,我正在寻找一种算法,它可以从一系列线中计算出给定点(p)所在的区域。线以x和y坐标存储,生成的区域将存储为多边形,其中可能有孔 这里有两幅图来说明我的意思: 许多CAD应用程序使用此类算法来让用户填充区域。我不知道如何调用这样的方法,所以我真的不知道要搜索什么 编辑1:以明确我要查找的内容: 我不需要一个算法来计算多边形的面积,我需要一个算法来返回由围绕p的线构成的多边形。如果p在任何可能的多边形之外,该算法将失败 (我还编辑了图片) 编辑2:我阅读了的公认答案,我正在寻找一种点定位算法。

我正在寻找一种算法,它可以从一系列线中计算出给定点(p)所在的区域。线以x和y坐标存储,生成的区域将存储为多边形,其中可能有孔

这里有两幅图来说明我的意思:

许多CAD应用程序使用此类算法来让用户填充区域。我不知道如何调用这样的方法,所以我真的不知道要搜索什么

编辑1:以明确我要查找的内容:

我不需要一个算法来计算多边形的面积,我需要一个算法来返回由围绕p的线构成的多边形。如果p在任何可能的多边形之外,该算法将失败

(我还编辑了图片)

编辑2:我阅读了的公认答案,我正在寻找一种点定位算法。
我还搞不清楚,它确切地解释了我在寻找什么,更重要的是,它让我找到了一个开源软件,它提供了做这些事情的功能。的第4.6点给出了一个示例,说明如何使用该库从一组线段形成一个区域。

一种方法是想象一条从p到无穷远的直线。对于每个多边形,测试每条边以查看其是否与直线相交。数一数有多少条线交叉。如果为偶数,则该点位于多边形外部;如果为奇数,则该点位于多边形内部

这是一个相当标准的数学结果。如果你想更深入地了解这个主题,请看一看

本周早些时候,我做了类似的事情 这将计算给定一组直线的点周围的多边形。您可以在回答中提到的JSFIDLE上看到一个工作示例 不同之处在于,它使用无限多条数学直线,而不是线段,但在本例中很容易修改

一种轮廓算法 首先构造两个数据结构,一个是线段,一个是线段的交点。在每个记录中,哪两条线给出了每个交点,所以您可以从 一个接一个。可以通过线段的成对相交来实现这一点

在交点处切割线段可能是最容易的,因此每条线段上只有两个解决方案,每一端一个。我们假设我们已经这样做了

修剪数据结构,删除所有没有交点且只有一条线段的线段-这些都不起作用

寻找可能的起点。您可以计算每条线到该点的距离,并取最小值。您可以检查从点到无穷远处的直线的交点

逆时针绕多边形走一圈。用你的起跑线找到最逆时针的终点。在这一点上找到最逆时针的部分。然后重复。可能会形成闭合回路,在这种情况下,放弃回路中的所有段。继续,直到你回到起点


检查多边形是否实际包围该点。如果是这样,我们就完成了。如果不放弃多边形中的线段并重新开始。

如果对多边形进行三角剖分,则已成功将其分解为一个形状,我们知道如何计算该形状的面积。剩下的就是对每个三角形的面积求和。这将涉及到找到绑定
P
的直线的交点,因此直线相交。这看起来像是多边形问题中的一个简单点。点击你最喜欢的搜索引擎,或者四处搜索这个短语。我没有可以三角形化的多边形,我只有可以形成多边形的线。我需要一个算法来给出那个多边形(如果它存在的话)。我认为这是一个复制品,它也是一个复制品。我意识到OP没有多边形,只有线段