判断矩形是否相交以及求出相交的区域(含Demo)

  1. 设计一个算法,确定两个矩形是否相交(即有重叠区域)
  2. 如果两个矩形相交,设计一个算法,画出相交的区域矩形
  3. 拖动矩形,保持相交区域正确

(1) 对于这个问题,一般的思路就是判断一个矩形的四个顶点是否在另一个矩形的区域内。这个思路最简单,但是效率不高,并且存在错误,错误在哪里,下面分析一 下。

图1

如上图,把矩形的相交(区域重叠)分成三种(可能也有其他划分),对于第三种情况,如图中的(3),两个矩形相交,但并不存在一个矩形的顶点在另一个矩形 内部。所以那种思路存在一个错误,对于这种情况的相交则检查不出。

仔细观察上图,想到另一种思路,那就是判断两个矩形的中心坐标的水平和垂直距离,只要这两个值满足某种条件就可以相交。
矩形A的宽 Wa = Xa2-Xa1Ha = Ya2-Ya1
矩形B的宽 Wb = Xb2-Xb1Hb = Yb2-Yb1
矩形A的中心坐标 (Xa3,Ya3) = ((Xa2+Xa1)/2 ,(Ya2+Ya1)/2)
矩形B的中心坐标 (Xb3,Yb3) = ((Xb2+Xb1)/2 ,(Yb2+Yb1)/2)
所以只要同时满足下面两个式子,就可以说明两个矩形相交。
1)| Xb3-Xa3 | <= Wa/2 + Wb/2
2)| Yb3-Ya3 | <= Ha/2 + Hb/2
即:
| Xb2+Xb1-Xa2-Xa1 | <= Xa2-Xa1 + Xb2-Xb1
| Yb2+Yb1-Ya2-Ya1 | <=Y a2-Ya1 + Yb2-Yb1

效果图

实现 Demo:
https://codepen.io/nbka/pen/PERxoq

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【Android 自定义View之绘图】 基础图形的绘制 一、Paint与Canvas 绘图需要两个工具,笔和纸。...
    Rtia阅读 11,755评论 5 34
  • 昨天到今天,一天之内纯属巧合的同时看到两个人,一位是季羡林,一位是梁漱溟先生描述有关人与世界相处,虽然不是一模一样...
    张coco阅读 207评论 0 0
  • 语言产生的意义是什么? 沟通、交流?这应算是功用。产生之初,其本身并无什么意义,其要表达、传递的信息才是意义所在。...
    real木紫阅读 200评论 0 1
  • 瞻帚揆玊阅读 189评论 0 0
  • 天黑了 衾被寒凉 一团粉色陷在你怀里 脸颊蹭过 温热 你告诉自己 没什么可怕 没有欲望 小丑才不会回魂 但当你闭上...
    地梦子阅读 223评论 1 3