合并和分割重叠的矩形以生成不重叠的矩形

2024-02-20

我正在寻找如下算法:

给定一组可能重叠的矩形(所有矩形都“未旋转”,可以统一表示为(左,上,右,下)连音符等...),它返回一组最小的(非旋转)不重叠的矩形,占据相同的面积。

乍一看似乎很简单,但事实证明很棘手(至少要高效地完成)。

this/ideas/pointers 有一些已知的方法吗?

不一定是最小的,但启发式的小集合的方法也很有趣,产生任何有效输出集的方法也很有趣。


我认为基于线扫描算法的东西会起作用:

  • 对所有矩形的最小值和最大值进行排序x坐标到数组中,作为“开始矩形”和“结束矩形”事件
  • 单步遍历数组,将遇到的每个新矩形(开始事件)添加到当前集合中
  • 同时,维护一组“不重叠的矩形”,这将是您的输出集
  • 任何时候你遇到一个新的矩形,你都可以检查它是否已经完全包含在当前/输出集中(简单比较y- 坐标就足够了)
  • 如果不是,请向输出集中添加一个新矩形,使用y- 坐标设置为新矩形中尚未覆盖的部分。
  • 每当您遇到矩形结束事件时,请停止输出集中不再覆盖任何内容的任何矩形。

我不完全确定这涵盖了所有内容,但我认为通过一些调整应该可以完成工作。或者至少给你一些想法......:)

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

合并和分割重叠的矩形以生成不重叠的矩形 的相关文章

随机推荐

  • 如何覆盖 CSS

    我有基本的 CSS 经验 所以我想知道如何删除由 Primefaces 设置的 CSS 样式 ui inputfield ui widget content ui inputfield ui widget header ui inputfi
  • Hadoop:映射器和缩减器的数量

    我使用不同数量的映射器和缩减器 例如 1 个映射器和 1 个缩减器 1 个映射器和 2 个缩减器 1 个映射器和 4 个缩减器 在 1 1GB 文件上多次运行 Hadoop MapReduce Hadoop安装在具有超线程的四核机器上 以下
  • JS:未捕获类型错误:对象不是函数(onclick)

    Edit 这是一个 JSfiddle http jsfiddle net XpmZG Edit2 错误在这一行
  • 如何获取物理设备支持的音频格式(WinAPI、Windows)

    我有一个音频设备 USB 麦克风 我想找出它本机支持的音频格式 位深度和采样率 在 OS X 上有一个很好的 kAudioStreamPropertyAvailablePhysicalFormats Core Audio 属性 但我找不到类
  • 使用文件名中的当前日期创建文件 + Robocopy 日志记录

    由于对批处理文件 脚本和一般 编码 的经验很少 我很快就遇到了我想要创建的批处理的问题 情况如下 我有一个文件夹 其中自动插入 txt 文件 我想根据文件的名称将这些文件移动到不同的文件夹 我用 Robocopy 做了这个 效果很好 然后我
  • 如何为 AlertDialog 创建 setAdapter()

    我创建了一个CustomDialogBuilder延伸Dialog 我想创建方法setApater 我创建了该部分 但是onClick适配器上的方法不起作用 My customDialogBuilder下面给出了类 public class
  • 为什么带有转换器的多重绑定在工具提示中不起作用?

    对于相当复杂的 WPF 工具提示的一部分 我尝试使用 MultiBinding 来生成基于两个属性的格式化文本 问题是 绑定的 MultiConverter 接收DependencyProperty UnsetValue对于其中的每个项目v
  • matplotlib matshow xtick 顶部和底部标签

    我正在尝试可视化名称共现矩阵 这个版本工作正常 import pandas as pd import numpy as np import string import matplotlib pyplot as plt n 10 names
  • 在 GitHub 上以协作者身份编辑文件

    我正在尝试对我被邀请作为合作者的 GitHub 存储库进行更改 我可以创建新文件并修改它们 但是当我尝试对现有文件进行任何更改时 我看到这条消息说 您必须在分支上才能对该文件进行或建议更改 然后 只有在通过终端推送提交后 我才能在 GitH
  • FEATURE_ACTIVITY_TRANSITIONS 与 FEATURE_CONTENT_TRANSITIONS

    我无法理解这两者之间的区别Window http developer android com reference android view Window html标志 但我不能 100 确定何时需要使用每一个以及为什么 的文档Window
  • 为什么 Flutter 小部件是不可变的?

    我无法理解为什么 Flutter 对象是不可变的 我在 Flutter 文档中尝试过 但没有那么有帮助 如果有人能帮助我解决这个问题 我将不胜感激 另外 我两天前才开始使用 flutter 非常棒 From https api flutte
  • 如何使用python捕获网络流量[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在使用 python 并尝试抓取我的计算机和站点之间的 HTTP s 流量 其中包括所有传入和传出请求 响应 例如图像和外部调用等
  • @ngrx/store 是可观察到的热还是冷?

    我认为它是一个冷可观察的对象 默认情况下 但在代码或文档中找不到对它的引用 抱歉 如果已经问过这个问题 找不到东西 TLDR这是一个热门的观察点 因为动作主题 https github com ngrx platform blob mast
  • 如何在 vscode 中根据自定义的 launch.json 创建模板?

    对于我的项目 我定制了我的启动 json file 如何将自己的自定义启动配置保存为模板 就像C GDB LLDB 模板 这样我每次打开新文件夹 项目 时都可以轻松地重新使用它 我不想将其添加到下面全局启动配置 https code vis
  • 如何订购淘汰赛绑定?

    我正在使用 Knockout js 我陷入了一个有点奇怪的情况 很难解释 但我正在尝试 如果我不清楚 抱歉 我在单个选择列表上使用自定义绑定和选项绑定
  • 什么是缓冲区?什么是缓冲读和缓冲写?

    今天很长一段时间后我听到了 缓冲区 这个词 想知道是否有人可以很好地概述缓冲区以及它在当今世界的重要性的一些例子 缓冲区通常是内存的一部分 其中包含尚未完全提交到其预期设备的数据 在缓冲 I O 的情况下 通常有一个快速设备和一个慢速设备
  • 尝试使用 KMS 解密 Lambda 函数中的密文会导致超时

    使用 AWS CLI 从命令行解密密文时 密文可以顺利解密 aws kms decrypt ciphertext blob fileb encrypted secrets output text query Plaintext region
  • 寻找最少矩形来覆盖一组矩形而不重叠的算法

    我有一组矩形 我想 减少 该组 以便用最少数量的矩形来描述与原始组相同的区域 如果可能的话 我希望它也能很快 但我更关心的是让矩形的数量尽可能少 我现在有一个在大多数情况下都有效的方法 Currently I start at the to
  • 使用正则表达式替换时,如何保留匹配字符串的一部分?

    I have 12 hello mp3 21 true mp3 35 good mp3 等等作为文本文件中列出的文件名 我只需要用空格替换数字前面的那些点 例如 12 hello mp3 gt 12 hello mp3 如果我将正则表达式设
  • 合并和分割重叠的矩形以生成不重叠的矩形

    我正在寻找如下算法 给定一组可能重叠的矩形 所有矩形都 未旋转 可以统一表示为 左 上 右 下 连音符等 它返回一组最小的 非旋转 不重叠的矩形 占据相同的面积 乍一看似乎很简单 但事实证明很棘手 至少要高效地完成 this ideas p