最小化随机矩形中的重叠

2023-12-31

我有许多可能重叠的矩形,它们的大小和位置在固定平面内是随机的。由于这些矩形是随机的,有些可能不会重叠:



|-----
|    |    |----|
|----|    |    |
          |----|
  

有些可能只重叠一个角:



|-----|
|  |--|--|
|--|--|  |
   |-----|
  

有些可能包含在另一个矩形内:



|----------------|
|                |
|   |-----|      |
|   |     |      |
|   |-----|      |
|----------------|
  

有些可能会穿过另一个矩形:



   |----------------|
   |                |
|--|-------------------|
|  |                |  |
|--|-------------------|
   |----------------|
  

etc.

我试图找到一种算法,为我提供一组矩形,这些矩形代表与输入集相同的区域,但不重叠。有些情况是显而易见的 - 包含在较大矩形内的矩形可以被丢弃,并且在角上重叠的矩形可以分成三个矩形,穿过另一个矩形的矩形也可以。我正在寻找的是一种处理所有这些情况的通用算法。我不太关心它是否效率不高——输入集相当小(最多 25 个矩形)

查找重叠的矩形很容易,但很快就会变得困难,特别是当您考虑到一个矩形可能与多个其他矩形重叠时。

这让我很头疼。有什么建议吗?

Update:

我刚刚又意识到一件事:

我可以在将矩形逐一添加到集合中时运行此算法,也可以在添加所有矩形后运行此算法。在添加矩形时,这样做可能会更容易,因为您只需要考虑一个矩形,但您仍然需要考虑单个矩形与多个其他矩形重叠的情况。


矩形与 x 轴和 y 轴平行吗?我想他们是。

您可以尝试使用KD-Trees http://en.wikipedia.org/wiki/Kd-tree.

或者,如果您想要一些自制的东西,但不一定高效,您可以“矩形化”,然后根据需要将矩形合并回来。

我所说的“矩形”是指您首先找到一个更大的矩形,其中所有矩形都适合(基本上是由最小左边缘、最大右边缘、最小底部边缘、最大顶部边缘形成的矩形)。

现在伸出矩形的所有边缘以切过大矩形。现在你有了一个“矩形”。基本上,这意味着您对垂直边缘和水平边缘进行排序,并选择相邻的对以形成一个小矩形。对于每个小矩形,您现在可以检查这是否是感兴趣区域的一部分,如果不是则拒绝它(它要么完全在内部,要么完全在外部)。

现在你有一个小矩形列表(可能是 O(n^2),在你的情况下可能是 ~2500),它们构成了你感兴趣的区域。如果数量足够小以供将来处理,则可以仅使用它们,或者可以将它们合并在一起以减少矩形的数量。

要合并,您可以考虑一个矩形并考虑 4 种合并可能性(右侧或左侧具有相同高度的相邻矩形,或者顶部或底部具有相同宽度的相邻矩形)。

您可以通过维护边缘的排序列表(水平和平行)以及一些哈希表来加快某些处理速度(不仅仅是在合并期间)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最小化随机矩形中的重叠 的相关文章

  • 填充体积算法

    我有一个具有一定尺寸长度 宽度 高度的盒子 我有不同长度 宽度 高度的物品 是否有现有的算法可以确定放入盒子中的最佳物品 这称为装箱 切割库存 背包问题 并且是 NP 难问题 一般来说 您只能通过使用启发式方法获得近似解 请参见示例 htt
  • 计算字符串的所有子串中子序列的出现次数

    我想编写一个算法来计算字符串的所有子字符串中字符子序列 不相交 出现的总数 下面是一个例子 字符串 jabcohnnyjohnny 后续 约翰尼 包含子序列的子字符串 jabcohnny jabcohnnyj jabcohnnyjo jab
  • 如何知道您的单元测试装置是否“尺寸合适”?

    您如何知道 测试夹具 的尺寸是否合适 我所说的 测试夹具 是指一个包含大量测试的类 我在测试装置中一直注意到的一件事是它们变得有点冗长 鉴于它们也可能不够详细 您如何了解单元测试的大小是否合适 我的假设是 至少在 Web 开发的背景下 您应
  • 简单的排名算法

    我需要创建一个民意调查 按照项目的好坏顺序创建一个排名列表 我打算向每个用户展示两个项目 让他们选择一个他们认为更好的项目 然后多次重复这个过程 它有点类似于您在社交网络电影 我应该如何根据收到的答案对项目进行排名 看着那 这ELO国际象棋
  • 检查有效的 IMEI

    有人知道如何检查有效的 IMEI 吗 我找到了一个可以检查此页面的功能 http www dotnetfunda com articles article597 imeivalidator in vbnet aspx http www do
  • 自动跟踪算法

    我正在尝试写一个simple跟踪例程来跟踪电影中的某些点 本质上我有一系列 100 帧长的电影 在黑暗背景上显示一些亮点 我每帧有大约 100 150 个点 它们在电影的过程中移动 我想跟踪它们 所以我正在寻找一些有效的 但可能不会过度实施
  • 如何为多边形创建内部螺旋?

    对于任何形状 我如何在其内部创建类似形状的螺旋 这与边界 使用 Minkowski 和 类似 尽管它会是相同形状的螺旋 而不是在形状内部创建相同的形状 我找到了这个 http www cis upenn edu cis110 13su le
  • “包含字符串”的快速索引

    在我的应用程序中 我有多达数百万个短字符串 大部分短于 32 个字符 我想实现一个带有附加列表的搜索框 该列表仅包含包含在搜索框中输入的整个字符串的元素 如何预先建立索引来快速找到此类字符串 所有排序的 STL 容器都会检查整个字符串 对于
  • 是否有一种算法可以在线性时间内计算数组反转?

    我知道有多少倒转 en wikipedia org wiki Inversion 28discrete mathematics 29 in an n 元素数组可以在 O n log n 操作使用增强型归并排序 http www geeksf
  • 如何求两个地点的经纬度距离?

    我有一组位置的纬度和经度 怎么找distance从集合中的一个位置到另一个位置 有公式吗 半正矢公式假定地球是球形的 然而 地球的形状更为复杂 扁球体模型会给出更好的结果 如果需要这样的精度 你应该更好地使用文森特逆公式 See http
  • 在树结构的 Big-O 表示法中:为什么有些来源引用 O(logN),有些来源引用 O(h)?

    在研究遍历二叉搜索树的任何算法的复杂性时 我看到两种不同的方式来表达同一件事 版本 1 最坏情况下的遍历算法对树的每个高度进行一次比较 因此复杂度是O h 版本 2 最坏情况下的遍历算法对树的每个高度进行一次比较 因此复杂度是O logN
  • 优化计算中使用的 # 个线程的算法

    我正在执行一个操作 我们将其称为CalculateSomeData CalculateSomeData 在连续的 代 中运行 编号为 1 x 整个运行中的代数由CalculateSomeData 的输入参数固定 并且是先验已知的 完成一次生
  • JavaScript 中的埃拉托斯特尼筛法对大量数据无限运行

    我一直在尝试写埃拉托斯特尼筛法 http en wikipedia org wiki Sieve of EratosthenesJavaScript 中的算法 基本上我只是按照以下步骤操作 创建从 2 到 n 1 的连续整数列表 令第一个素
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • 删除近排序数组中未排序/离群元素

    给定一个像这样的数组 15 14 12 3 10 4 2 1 我如何确定哪些元素乱序并删除它们 在本例中为数字 3 我不想对列表进行排序 而是检测异常值并将其删除 另一个例子 13 12 4 9 8 6 7 3 2 我希望能够删除 4 和
  • 为什么 Dijkstra 算法使用减密钥?

    Dijkstra 教给我的算法如下 while pqueue is not empty distance node pqueue delete min if node has been visited continue else mark
  • ASCII - Asciimatics - 如何在代码中实现效果/屏幕

    几篇文章之前 有人建议我研究一下 Python 的 Asciimatics 库 我正在尝试使用以下方法来解决它 样品 https github com peterbrittain asciimatics tree master sample
  • 语义差异实用程序[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试找到一些语义差异 合并实用程序的好例子 比较源代码文件的传统范例是通过比较行和字符来工作的
  • 领域驱动设计与模型驱动架构

    我很好奇 领域驱动设计和模型驱动架构有什么区别 我的印象是他们有某些相似之处 你能启发我吗 Thanks 不要不同意上面的大部分内容 尽管它可能值得稍微扩展一下 DDD 中最重要的一个概念是关注问题域 将对技术的痴迷放在一边 主要集中于对您
  • 添加边后更新最大流量

    考虑我们有一个网络流量 并使用 Edmond Karp 算法 我们已经拥有网络上的最大流量 现在 如果我们向网络添加任意边 具有一定容量 更新最大流量的最佳方法是什么 我正在考虑更新关于新边缘的残差网络 并再次寻找增强路径 直到找到新的最大

随机推荐

  • 证书存储访问被拒绝

    我收到 System Security Cryptography CryptographyException 访问被拒绝 当尝试创建媒体服务任务或作业时 该应用程序在天蓝色网站实例上运行 一切都在本地进行 看起来该应用程序无法写入证书存储
  • 在 OCaml 中中断调用

    如果计算时间太长 我想中断呼叫 就像这样 try do something with Too long gt something else 在 OCaml 中可以做类似的事情吗 功能do something不得修改 一般来说 中断函数的唯一
  • 在git中配置远程的方法

    看完之后this https git scm com docs git push remotes a id remotes a 我知道有 3 种方法可以提及远程的 url 以及推送和拉取引用规范 以防它们被 git 推 拉跳过 Git 配置
  • `svn checkout` 失败并出现“无法运行程序”“找不到指定的文件”错误

    我正在检查谷歌代码中的示例 它要求我使用 SVN Checkout 来检查源代码 因为我使用的是 Android Studio 所以我使用了 VCS 中的 Subversion 签出选项 gt 从版本控制中签出 gt Subversion
  • 按钮未停留在 div 内

    我有一个 div and a div
  • 如何在我的所有 Windows 上添加通用控件?

    我想创建一种样式来修改我的所有窗口并向其添加一些控件 我的窗口看起来像这样 我想让它看起来像这样 通过应用样式 我不必在所有窗口中重复代码 我怎样才能做到这一点 1 创建资源字典
  • 如何使用动态生成的对象作为CodeEffects生成器的数据源

    我们正在使用这个组件www codeeffects com http www codeeffects com它允许我们根据对象属性创建业务规则 视图的html是这样的 ViewBag Title Post Example Html Code
  • 如何在 Spring MVC 控制器中接受 2D 数组?

    我正在通过 jQuery Ajax 发出 POST 请求 ajax type POST url opts save url data ul obj serializeFormList form id form db id The ul ob
  • Python 第二次如何更快地读取这个二进制文件?

    我正在探索读取格式化二进制文件的方法 并从基础知识开始 gt gt gt with open fp rb as f buffer f read 我的文件有 1 02GB 第一次读取并存储在内存中大约需要 90 秒 一次偶然的机会 我不小心让
  • 使用Chrome Extension Manifest V3,如何执行代码字符串?

    我正在使用 Manifest V3 编写一个 Chrome 扩展 并试图找到一种动态执行代码字符串的方法 类似于用户脚本 有执行代码字符串的方法 eval setTimeout new Function 等 然而 它们在 Manifest
  • 我无法在 Nuxt.js/vue.js 中使用第三方组件

    我尝试将此库用于我的 Nuxt 项目 入门 https yuche github io vue strap getting started 我尝试如何在文档中编写 但在所有变体中都会出现错误 例如 未知的自定义元素 您是否正确注册了组件 对
  • Android Studio 创建的 APK 比 Eclipse 创建的 APK 大。为什么?

    我检查了 APK 的文件 发现来自 AS 的 APK 文件包含更多资源 例如 图像 xml 所有与 Holo 主题相关的资源 我的问题是我怎样才能摆脱它们 我只想在 APK 中添加我添加的资源 从 app iml 中删除以下几行将解决我的问
  • Mysql 小数:取整而不是取整

    在我的 MySQL 数据库中 我有字段 DECIMAL 23 5 因此小数点后有 5 位数字 现在 当我这样查询时 UPDATE my table SET my decimal field 123 123456789 WHERE id 1
  • IronPython 无法运行导入 numpy 的脚本

    免责声明 我不熟悉 Python 我是一名 C 开发人员 编写了一个应用程序来使用 IronPython 执行 Python 脚本 由其他人编写 这些脚本到目前为止只需要使用import math 但我们的一位用户要求该应用程序支持 Num
  • 修复了 CSS 位置在 IE 11 中不起作用的问题

    我有一个图片库 底部有标题 上图 字幕使用position fixed bottom 0 并且适用于除 IE 之外的所有浏览器 甚至是最新版本 11 096 标题固定在屏幕顶部 而不是底部 下图 我尝试了自己研究时发现的一些建议 验证正确的
  • 创建动态表达式>

    我想创造一个动态Expression
  • API 和设备驱动程序之间的区别

    我试图理解他们之间的关系 据我所知 它们都可以成为 HAL 的一部分 如果应用程序和显卡之间进行通信 API 可以自行完成工作还是必须同时依赖它们 API 可以直接与硬件通信吗 还是我们总是需要中间的驱动程序来翻译 API 的命令 TL D
  • Github API - 作者提交

    I am wondering if it is at all possible to use GitHub s API1 to retrieve a list of commits by a given author for a speci
  • -webkit-file-upload-button Firefox 的 CSS 实现

    我有 css 实现
  • 最小化随机矩形中的重叠

    我有许多可能重叠的矩形 它们的大小和位置在固定平面内是随机的 由于这些矩形是随机的 有些可能不会重叠 有些可能只重叠一个角 有些可能包含在另一个矩形内 有些可能会穿过另一个矩形