algorithm - 测试轴对齐矩形是否覆盖另一个矩形的快速算法
问题描述
我们有轴对齐的矩形:{ top, left, width, height: number}
我们要测试给定:
- 轴对齐的矩形列表
rs
- 轴对齐的矩形:
r
ifr
完全被 的并集覆盖rs
。
最快的方法是什么?
我发现有快速的数据结构来测试rs
和的交集r
(例如https://github.com/mourner/rbush),所以我可以先找到rs
相交的矩形,r
然后从r
所有这些矩形中减去,然后看看如果您有任何剩余区域。rs
如果没有太多重叠,这似乎效果很好,因为你最终不会有很多相交的矩形。
有更好的解决方案吗?
解决方案
你可以想到一个扫描线过程。
按顶部边缘的纵坐标对所有矩形进行排序。然后从顶部边缘移动到顶部边缘,保持更新“活动矩形”列表(即跨越当前水平的所有矩形)。
考虑两个连续水平线之间这些矩形覆盖的水平范围,并检查它们是否完全覆盖了目标矩形的相应切片。
推荐阅读
- c++ - 覆盖 C++ 中的“虚拟类型函数(类型)= 值”声明
- arrays - 如何访问Angular 9中数组元素中的数组元素
- nuxt.js - 覆盖 Nuxt.js auth 模块的策略参数
- python - 将 python faker dict 类型转换为 json 对象
- excel - 如何用 Excel VBA 中的列名填充下拉列表?
- python - 改进用于文本分类的 Keras 模型
- javascript - angularjs - 动态 ng-if
- ruby-on-rails - 包裹在使用 sidekid 交付的延迟作业中的 ActiveMailer 不会显示在 Sidekiq 邮件队列中?为什么?
- r - 如何在 R markdown 中缩进编号的引用列表?
- sql - 如何在排名排行榜表中查询特定用户条目和“围绕”用户的条目子集?