最小化随机矩形中的重叠

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(使用前将#替换为@)

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

  • 编程 Pearls - 随机选择算法

    Programming Pearls 第一版第 120 页介绍了从 N 个整数总体中选择 M 个等概率随机元素的算法 InitToEmpty Size 0 While Size lt M do T RandInt 1 N if not Me
  • 使用主方法求解 T(n) = 2T(n/2) + n/log n 和 T(n) = 4T(n/2) + n/log n 之间的差异

    我最近偶然发现了一个资源 其中 2T n 2 n log ntypeMM 宣布复发无法解决 我接受它作为一个引理 直到今天 另一种资源被证明是矛盾的 在某种意义上 根据资源 下面的链接 其中的 Q7 和 Q18 是建议 分别在问题中的1和2
  • 确定解决迷宫问题的最小线段数

    我有一个问题 我需要定义一个具有最少数量的顶点的多边形 该多边形与不透明的图像中的每个像素相交或包含每个像素 令 N 为图像中的像素数 我唯一的假设是图像的边界 孔 内不能包含透明像素 并且至少有两个像素是不透明的 举个例子 假设我有以下图
  • 高维最近邻搜索的最佳数据结构

    我实际上正在处理高维数据 50 000 100 000 个特征 并且必须对其执行最近邻搜索 我知道随着维度的增长 KD 树的性能很差 而且我还了解到 一般来说 所有空间分区数据结构都倾向于对高维数据执行详尽的搜索 此外 还有两个重要事实需要
  • 点集子集的最小周长凸包

    给定平面上的 n 个点 没有 3 个共线 给定数字 k 找到 k 个点的子集 使得 k 个点的凸包在 k 个点的子集的任何凸包中具有最小周长 我可以想到一个简单的方法 运行时间为 O n k k log k 找到大小为 k 的每个子集的凸包
  • 如何求小于给定数的最大2次方

    我需要找到小于给定数字的最大 2 次幂 我陷入困境 找不到任何解决方案 Code public class MathPow public int largestPowerOf2 int n int res 2 while res lt n
  • 如何仅使用单个数组在 JavaScript 中模拟调用堆栈

    我正在看维基百科页面 https en wikipedia org wiki Call stack在调用堆栈上 并尝试理解这个图像 据我所知 哈哈 const memory memory 0 3 top of stack pointer m
  • 分而治之策略来确定列表中是否有超过 1/3 的相同元素

    我正在使用分治算法来确定列表中是否有超过 1 3 的元素相同 例如 1 2 3 4 不 所有元素都是唯一的 1 1 2 4 5 是的 其中 2 个是相同的 没有排序 是否有分而治之的策略 我陷入了如何划分的困境 def is valid i
  • C 埃及分数

    古埃及人仅使用以下形式的分数1 n因此任何其他分数都必须表示为这些单位分数的总和 而且 所有单位分数都是不同的 在C或Java中使任何分数成为埃及分数 总和越少越好 的好方法是什么 可以使用什么算法 分支定界 a 例如 3 4 1 2 1
  • 用 C++ 生成 AST

    我正在用 C 制作一个解释器 到目前为止我已经有了词法分析器来生成标记 问题是我不确定如何生成 行走 解析树 我正在考虑使用数组数组来制作解析树 但我不确定如何以正确的顺序将标记实际插入到解析树中 我不确定是自上而下 左右还是自下而上 左右
  • “此应用程序已请求运行时以异常方式终止它”的原因是什么?

    Visual C 运行时抛出一个常见错误 此应用程序已请求运行时以异常方式终止它 请联系应用程序的支持团队以获取更多信息 该错误消息实际上是什么意思mean 让我用一个比喻来准确地解释我的问题 如果我看到一条消息 异常 访问冲突 0xc00
  • 如何有效地找到距给定点最远的点(从一组点中)?

    我正在寻找一种算法或数据结构来解决以下问题 给你一组点 S 然后你会得到另一个点形式的 Q 查询 对于每个查询 找到集合中距离给定点最远的点 集合中最多有 10 5 个点和 10 5 个查询 所有点的坐标都在 0 到 10 5 范围内 我想
  • 如何检查是否存在可能的路径?

    我正在开发一个基于 javascript 的实验性游戏 玩家必须在二维平铺地图上移动才能退出 请随意检查这个小提琴并演奏 http jsfiddle net moonlife 74vLd 我只是随机放置障碍物 但有时障碍物会挡住玩家和出口之
  • 验证假名输入

    我正在开发一个允许用户输入日语字符的应用程序 我试图想出一种方法来确定用户的输入是否是日语假名 平假名 片假名或汉字 应用程序中的某些字段不适合输入拉丁文文本 我需要一种方法将某些字段限制为仅限汉字或仅限片假名等 该项目使用UTF 8编码
  • 子序列和

    给定一个整数数组 例如 1 2 3 1 查找是否存在总和为0并返回它 例如 1 2 3 or 2 3 1 检查每个子序列是O n 2 这效率太低了 有改进的想法吗 创建一个新数组 其中每个元素等于前一个元素加上该元素的总和 Input 1
  • 从一种数字系统转换为另一种数字系统后会有多少位数字

    主要问题 有多少位数字 让我解释 我有一个二进制数 11000000 十进制数是192 转换为十进制后 它有多少位 以十进制表示 在我的示例中 它是 3 位数字 但是 这不是问题 我在互联网上搜索并找到了一种用于整数部分的算法和一种用于小数
  • Florian 的 Grisu2 算法如何工作?

    我遇到了一个关于将 double 转换为 ascii 的问题 经过搜索 我得到了 Florian 的论文 使用整数快速准确地打印浮点数 http www cs tufts edu nr cs257 archive florian loits
  • 大数据使用什么数据结构

    我有一个包含一百万行的 Excel 工作表 每行有 100 列 每行代表一个具有 100 个属性的类的实例 列值是这些属性的值 哪种数据结构最适合在这里使用来存储数百万个数据实例 Thanks 这实际上取决于您需要如何访问这些数据以及您想要
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它
  • 用于开始和/或包含搜索的最快字符串集合结构/算法是什么

    我有以下情况 我有一个大的字符串集合 比如说 250 000 平均长度可能是 30 我要做的就是在这些搜索中进行许多搜索 大多数搜索都是 StartsWith 和 Contains 类型的 该集合在运行时是静态的 这意味着选择的集合的初始读

随机推荐

  • 证书存储访问被拒绝

    我收到 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 实现
  • 最小化随机矩形中的重叠

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