【问题标题】:Algorithm for getting an area from line data (CAD fill algorithm)从线数据中获取区域的算法(CAD填充算法)
【发布时间】:2014-05-09 05:37:01
【问题描述】:

我正在寻找一种算法,该算法从线列表中计算给定点 (P) 所在的区域。这些线与 x 和 y 坐标一起存储,生成的区域应该存储为一个多边形,它可以里面有洞。

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

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

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

我不需要算法来计算多边形的面积,我需要一个算法来返回由 P 周围的线形成的多边形。如果 P 在任何可能的多边形之外,算法就会失败。

(我还编辑了图像)

编辑 2: 我阅读了this possible duplicate 的公认答案,我正在寻找点定位算法。 我还偶然发现了this site,它确实解释了我在寻找什么,更重要的是,它让我找到了开源CGAL library,它提供了执行此类操作的功能。 CGAL manual 的第 4.6 点给出了一个示例,如何使用该库从一堆线段中形成一个区域。

【问题讨论】:

  • 如果您对多边形进行三角剖分,则您已成功将其分解为我们知道如何计算面积的形状。剩下的就是对每个三角形的面积求和。这将涉及找到绑定P 的线的交点,因此线-线交点。
  • 这看起来像一个简单的多边形中的点问题。点击您最喜欢的搜索引擎,或在 SO 上搜索该短语。
  • 我没有可以三角剖分的多边形 - 我只有可以形成多边形的线。我需要一个算法来给出那个多边形(如果它存在的话)。
  • 我认为这是重复的stackoverflow.com/questions/5851700/…

标签: algorithm cad


【解决方案1】:

一种方法是想象一条从 P 到无穷大的线。对于每个多边形,测试每条边以查看它是否与线相交。数一数有多少条线交叉。如果是偶数,则该点在多边形外,如果奇数,则该点在多边形内。

这是一个相当标准的数学结果。如果您想更深入地了解该主题,请查看https://en.wikipedia.org/wiki/Winding_number

本周早些时候我做了一件相当相似的事情Detecting Regions Described by Lines on HTML5 Canvas 这将计算给定一组线的点周围的多边形。您可以在答案中提到的 jsfiddle 看到一个工作示例 不同之处在于它使用无限的数学线而不是线段,但可以很容易地为这个例子进行修改。

大纲算法

首先构造两个数据结构,一个是线段,一个是线段的交点。在每条记录中哪两条线给出了每个交点,所以你可以从 一个对另一个。您可以通过线段的成对相交来获得它。

在交点处切割线段可能是最简单的方法,因此每个线段上只有两个解,每端一个。我们假设我们已经做到了。

修剪数据结构,删除所有没有交叉点且只有一个线段的线段 - 这些没有贡献。

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

逆时针绕多边形走。用你的起跑线找到最逆时针方向的一端。在这一点上找到最逆时针的部分。遵循并重复。可能会形成闭环,在这种情况下丢弃循环中的所有段。继续,直到回到起点。

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

【讨论】:

  • 我意识到 OP 没有多边形,只有线段
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 2015-09-12
  • 2021-08-02
相关资源
最近更新 更多