【问题标题】:Algorithm for area of polygons intersection [closed]多边形相交区域的算法[关闭]
【发布时间】:2015-05-31 11:35:00
【问题描述】:

我有两个简单的多边形,用顶点列表定义。

我需要计算他们相交的面积。我需要一个算法来做到这一点

【问题讨论】:

  • 哈哈哈,一旦完成,我需要一个巧克力派......先生,你的努力吧......
  • 我不明白为什么因为不清楚而关闭。我没有看到任何歧义,这是一个自然问题。除了作为顶点列表之外,您还想如何定义可能的非凸多边形?交叉点或多边形区域的面积(可能已断开)有什么不清楚的地方?
  • 我正在考虑添加一个涵盖非凸多边形的答案,但我不能,因为问题已关闭。
  • 不幸的是,为什么 mods 会关闭/删除您用简单语言表达的看似简单的问题。我有解决方案,很遗憾现在我无法发布。

标签: algorithm polygon


【解决方案1】:

判断两个多边形是否相交的算法。

假设:多边形是凸的。 (这些适用于凸多边形。) 您可以查看此link 了解更多信息。

为了能够确定两个凸多边形是否相交(相互接触),我们可以使用分离轴定理。本质上:

  • 如果两个凸多边形不相交,则它们之间存在一条线。
  • 只有当其中一个多边形的边之一形成这样的线时,这样的线才存在。

第一句话很简单。由于多边形都是凸面的,因此您可以绘制一条线,其中一个多边形在一侧,另一个多边形在另一侧,除非它们相交。第二个不太直观。看图 1。除非多边形的最近边彼此平行,否则它们彼此最接近的点是一个多边形的角最接近另一个多边形的边的点。然后这一边将形成多边形之间的分离轴。如果边平行,则它们都是分离轴。

那么这具体如何帮助我们确定多边形 A 和 B 是否相交?好吧,我们只是遍历每个多边形的每一边并检查它是否形成了一个分离轴。为此,我们将使用一些基本的向量数学将两个多边形的所有点压缩到一条垂直于潜在分隔线的线上(见图 2)。现在整个问题方便地是一维的。我们可以确定每个多边形的点所在的区域,如果这些区域不重叠,这条线就是一个分隔轴。

如果在检查两个多边形的每条线后,没有找到分离轴,则证明多边形相交并且必须对其进行处理。

注意:这个 SO 问题很好地描述了这部分。我已经使用了这个question的这一部分

如果重叠,公共区域覆盖的面积(大约)

算法就是这样工作的

算法从主题多边形中的all vertices 输入列表开始。接下来,剪辑多边形的一侧在两个方向上无限延伸,并遍历主题多边形的路径。如果输入列表中的顶点位于扩展剪辑多边形线的可见侧,则将它们插入到输出列表中,并且在主题多边形路径与扩展剪辑多边形线交叉处的输出列表中添加新顶点。

更多详情请访问此链接

凸多边形的面积

坐标(x1, y1), (x2, y2), (x3, y3), . . . ,(xn, yn)的凸多边形排列在“行列式”下面。坐标必须在多边形周围按逆时针顺序获取,开始和结束于同一点。

             | x1 y1 |
             | x2 y2 |
             | x3 y3 |
Area= (1/2)* | .. .. |
             | .. .. |
             | xn yn |
             | x1 y1 |

    = (1/2)[(x1*y2+x2*y3+...xn*y1)- (y1*x2+y2*x3+...+yn*x1)]

这些是解决问题所必须执行的步骤。希望有帮助。

【讨论】:

  • 你添加了多边形是凸的假设吗?
  • @DouglasZare.: 好的,谢谢。我已经添加了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-20
  • 2011-01-17
相关资源
最近更新 更多