Algorithm 多边形相交面积的算法

Algorithm 多边形相交面积的算法,algorithm,polygon,Algorithm,Polygon,我有两个简单的多边形,用顶点列表定义 我需要计算它们相交的面积。我需要一个算法来决定两个多边形是否相交。 假设:多边形是凸的。 (这些适用于凸多边形。) 您可以查看此项以了解更多信息 为了确定两个凸多边形是否相交(彼此接触),我们可以使用分离轴定理。基本上: 如果两个凸多边形不相交,则存在一条穿过它们的线 只有当其中一个多边形的一侧形成这样一条线时,这样一条线才存在 第一句话很简单。因为多边形都是凸的,所以您可以绘制一条线,一个多边形在一边,另一个多边形在另一边,除非它们相交。第二种方法稍微

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

我需要计算它们相交的面积。我需要一个算法来决定两个多边形是否相交。 假设:多边形是凸的。 (这些适用于凸多边形。) 您可以查看此项以了解更多信息

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

  • 如果两个凸多边形不相交,则存在一条穿过它们的线
  • 只有当其中一个多边形的一侧形成这样一条线时,这样一条线才存在
第一句话很简单。因为多边形都是凸的,所以您可以绘制一条线,一个多边形在一边,另一个多边形在另一边,除非它们相交。第二种方法稍微不那么直观。请看图1。除非多边形的最近边彼此平行,否则它们彼此最接近的点就是一个多边形的角点最接近另一个多边形的边的点。这一侧将在多边形之间形成一个分离轴。如果两侧平行,则它们都是分离轴

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

如果在检查两个多边形的每条直线后,没有发现分离轴,则已证明多边形相交,必须对此采取措施

注意:这个问题很好地描述了这一部分。我用过这一部分

如果重叠,公共区域覆盖的区域(近似值) 算法就是这样工作的

该算法从主题多边形中所有顶点的输入列表开始。接下来,剪辑多边形的一侧在两个方向上无限延伸,并遍历对象多边形的路径。如果输入列表中的顶点位于扩展剪辑多边形线的可见侧,则会将其插入到输出列表中,并且会将新顶点添加到输出列表中主体多边形路径与扩展剪辑多边形线相交的位置

有关更多详细信息,请访问此链接

凸多边形面积 坐标
(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)]

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

哈哈哈,吃完后我需要一个巧克力派。。。先生,你方有任何努力……我不明白为什么这件事被关闭,因为不清楚。我看不出任何模棱两可的地方,这是一个自然的问题。除顶点列表外,您还希望如何定义可能的非凸多边形?关于交叉点或多边形区域的区域(可能是断开的)有什么不清楚的?我想添加一个覆盖非凸多边形的答案,但我不能,因为问题是封闭的。不幸的是,为什么mods关闭/删除用简单语言表达的看似简单的问题。很遗憾,我现在无法发布解决方案。你添加了多边形是凸的假设吗?@DouglasZare.:好的,谢谢。我已经加上了。