社区
数据结构与算法
帖子详情
【求算法】 求一组重叠矩形区域,对应的非重叠矩形组
god_fish
2008-04-14 04:53:57
设有一组矩形R1~Rn,可能重叠,求出对应的非重叠矩形组T1~Tm
例如:
输入:矩形组R1(0,0,100,100),R2(50,50,100,100)
对应输出:T1(0,0,100,50),T2(0,50,150,50),T1(50,100,100,50)
P.S.矩形用R(x,y,w,h)表示
...全文
189
14
打赏
收藏
【求算法】 求一组重叠矩形区域,对应的非重叠矩形组
设有一组矩形R1~Rn,可能重叠,求出对应的非重叠矩形组T1~Tm 例如: 输入:矩形组R1(0,0,100,100),R2(50,50,100,100) 对应输出:T1(0,0,100,50),T2(0,50,150,50),T1(50,100,100,50) P.S.矩形用R(x,y,w,h)表示
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
K_s_G
2009-06-16
打赏
举报
回复
?
tailzhou
2008-07-14
打赏
举报
回复
计算不重合部分可以这样;
若要添加的矩形 跟某已添加矩形有重叠;
1)某已添加矩形 完全包含 要添加的矩形;不用再添加;
2)要添加的矩形 完全包含 某已添加矩形 ;将要添加的矩形 分解成4个新的矩形,分别添加;
3)其他情况 ;将要添加的矩形 分解成2个新的矩形,分别添加;
tailzhou
2008-07-14
打赏
举报
回复
如果只要求结果不重合;
那么有一个比较简单的方法;
依次添加矩形;
计算“要添加的矩形”跟“已添加矩形集合”的不重合部分;
每一个不重合的部分都当作一个矩形添加到“已添加矩形集合”里去;
tailzhou
2008-07-14
打赏
举报
回复
不过结果可以不唯一;
T1(0,0,100,50),T2(0,50,150,50),T3(50,100,100,50) 可以
T1(0,0,100,100),T2(100,50,50,50),T1(50,100,50,100) 也可以
甚至分成7个50*50的都可以;
任意一个输出都可以?
tailzhou
2008-07-14
打赏
举报
回复
看错,原来是w,h
tailzhou
2008-07-14
打赏
举报
回复
"输入:矩形组R1(0,0,100,100),R2(50,50,100,100)
对应输出:T1(0,0,100,50),T2(0,50,150,50),T1(50,100,100,50) "
怎么会出来150的坐标的?
god_fish
2008-07-14
打赏
举报
回复
UP还未解决
hyram
2008-05-21
打赏
举报
回复
mark
食人族哲学家
2008-05-19
打赏
举报
回复
踩个脚印,有空帮你想想,要是得到一个rgn还好整
UltraBejing
2008-05-01
打赏
举报
回复
以后需再关注,现在先帮你顶一下
knowledge_Is_Life
2008-05-01
打赏
举报
回复
好像没那么简单,呵呵.
meiZiNick
2008-05-01
打赏
举报
回复
没遇到过这种情况.
大王派我去巡山
2008-04-16
打赏
举报
回复
用扫描的方法可以很好地解决这个问题,想像一条垂直扫描线从左往右移动,途中经过了所有的矩形。
首先把矩形的表示方式改一下,改成(l,t.r.b)的形式,其中:
l=x;
t=y;
r=x+w;
b=y+h
其实就是改成了(左,上,右,下)的形式,这样更方便判断矩形是否相交,也便于描述一些。
然后将n个矩形中的l和r值(一共2*n个数据)混合在一起由低到高排序(如果出现值相等的情况,那就根据y值或b值小到大的顺序来判断谁前谁后)。注意这里用的是结构数据,不但要记录l和r的数值,还要记清楚这个值来自哪个矩形。
排序之后,将这2*n个值看作是“事件点”,后面的算法就是基于“事件点”来进行调度的。
我们用一个集合S来记录目前这条垂直扫描线穿过了哪些矩形,初始化的时候S是个空集。
遍历所有的事件点,有两种情况:
1)如果事件点是左边界l,则将对应的矩形插入S;
2)如果事件点是右边界r,则将对应的矩形从S中删除。
整个遍历的过程就好比是扫描线从左往右扫描了一遍,经过了所有的矩形。
两个相邻事件点之间,如果这时S不为空的话,就切出了一个个小矩形,当然纵向上还有一个判断矩形是否交叉去除重复的过程。
整个算法的复杂度是O(n^2),如果对S做一些优化(主要是便于优化和查找),还有进一步优化的余地。
不够完善的地方是最后出来的结果可能并不是最“简洁”的,也就是说,结果中有些矩形还可以合并成一个。如果想追求完美的话,最后再把最终结果(出来之后就是已经排好序的小矩形集合)扫描处理一遍就可以了。
god_fish
2008-04-15
打赏
举报
回复
UP
【
算法
题】
矩形
重叠
如果相交的面积为正,则称两
矩形
重叠
。需要明确的是,只在角或边接触的两个
矩形
不构成
重叠
。 给出两个
矩形
,判断它们是否
重叠
并返回结果。 示例 1: 输入:rec1 = [0,0,2,2], rec2 = [1,1,3,3] 输出:true 示例 2...
算法
题解之网易2018春招编程之最大
重叠
矩形
个数
题目描述:平面内有n个
矩形
,左下角坐标(x1[i],y1[i]),右上角坐标(x2[i],y2[i]),判断
重叠
矩形
最大数目是多少。 * 如果有两个或多个
矩形
有公共
区域
,则认为它们是
重叠
的,不考虑边界和角落。请计算出平面内
重叠
...
判断
矩形
重叠
-
算法
-先按左下角排序,然后找到不
重叠
的情况即可
矩形
重叠
矩形
以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。
矩形
的上下边平行于 x 轴,左右边平行于 y 轴。 如果相交的面积为 正 ,则称两
矩形
重叠
。需要明确的是...
【数据结构与
算法
】之深入解析“
矩形
重叠
”的
求
解思路与
算法
示例
矩形
以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标,
矩形
的上下边...如果相交的面积为 正 ,则称两
矩形
重叠
。需要明确的是,只在角或边接触的两个
矩形
不构成
重叠
。...
重叠
矩形
的合并
输入
一
组
矩形
,这些
矩形
的边与坐标轴平行,要
求
合并
重叠
的
矩形
并输出合并后的结果。
数据结构与算法
33,006
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章