首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定一个矩形是否完全被另一组矩形覆盖所需的算法

确定一个矩形是否完全被另一组矩形覆盖所需的算法
EN

Stack Overflow用户
提问于 2010-12-09 10:31:46
回答 7查看 2.5K关注 0票数 11

我正在搜索一种算法,该算法将确定一个新矩形是否完全被一组现有矩形所覆盖。另一种提出问题的方法是,新矩形是否与现有矩形覆盖的区域完全存在?

似乎有很多确定矩形重叠的算法,等等,但我真的找不到任何能解决这个问题的方法。

矩形将使用x,y坐标表示。这一问题与地理制图有关。

编辑-来自OP发布的评论:

矩形在X/Y轴上对齐

EN

回答 7

Stack Overflow用户

发布于 2010-12-09 10:55:53

如果矩形是对齐的,这很容易:

假设您有矩形A0,并且想知道它是否完全被(B1,B2,B3.)=B所覆盖

代码语言:javascript
复制
A := (A0)
while P := pop B
  for R in A
    if P fully covers R:
      remove R from A
    else if P and R does overlap:
      remove R from A
      break R in subrentangles S := (S1, S2, S3,...) following the intersections \
                                                     with P edges
      push S into A
if A is empty:
   say B covers A0
else:
   say B does not fully cover A0
票数 8
EN

Stack Overflow用户

发布于 2010-12-09 10:45:33

如果矩形都有相同的角度,那么下面的操作可能会更高效、更容易编程:

为每个y坐标确定哪个矩形覆盖那个y坐标(您只需对覆盖变化的y坐标进行此操作,即对应于矩形的上限或下限)。一旦您知道了这一点,就解决每个这样的y坐标的问题(即检查所有x值是否都由该Y坐标的“活动”矩形覆盖)。

编辑:我认为这是O(n^2 log(n)^2)的复杂性,因为两类都是您必须做的艰苦工作。

票数 3
EN

Stack Overflow用户

发布于 2010-12-09 10:39:22

我过去也做过类似的事情。这个想法是将新的矩形与现有的每一个(一个一个地)进行比较。

如果有一个交集,则丢弃它(相交部分),并将未覆盖的段添加到矩形数组中。

接下来,搜索新段和其他现有(仍未检查的)矩形之间的交集。

该算法递归地丢弃交叉口,只留下未发现的部分。

最后,如果数组中没有矩形,则完全重叠。

如果数组中仍然有一些矩形,则重叠不是满的,因为仍然有一些部分剩余。

希望这能帮上忙

我可以尝试找到我的代码,如果这是你要找的。我想是在C#

另一个想法是将所有现有的矩形转换为多边形,然后检查多边形内是否有新的矩形,但是如果您不使用一种知道如何处理多边形的语言(或框架),我建议不要这样做。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4397226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档