码迷,mamicode.com
首页 > 其他好文 > 详细

检查两个长方形是否有重叠部分

时间:2015-07-31 12:48:53      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:

Question: You are given two axis-aligned rectangles. You have to determine if these rectangles overlap each other or not.
Rectangle 1 : P1 (x, y), P2 (x,y)
Rectangle 2 : P3 (x, y), P4 (x,y)

这个问题给出两个长方形的坐标,问这两个长方形是否有重合部分。画出图来就是这样的:技术分享

问题似乎有点复杂,如果你找出了复杂的一组条件表达式,肯定用了不少力气。有个简单的办法,试着从反面看这个问题。

假设两个长方形分别有点(P1, P2)和点(P3, P4)表示。当两个长方体有重叠部分,肯定有一个长方体的一个角在另一个长方体的里面。看下面的图:技术分享

现在重新看问题,似乎还是很复杂,难道要用8个条件表达式来表示?能不能简化问题?

反面思考问题,袋子中有8个颜色各异的球,取不到黑球的概率是多少呢?我们先计算取出黑球的概率,在用1去减就行了。

同样,两个长方形怎样才能不重叠呢?答案很简单:当一个长方形在另一个长方形的上下左右的时候。

相应的条件表达式:

! ( P2.y < P3.y || P1.y > P4.y || P2.x < P3.x || P1.x > P4.x )

用De Morgan’s law简化一下:

( P2.y <= P3.y && P1.y >= P4.y && P2.x >= P3.x && P1.x <= P4.x )

是不是整洁多了?

检查两个长方形是否有重叠部分

标签:

原文地址:http://www.cnblogs.com/programnote/p/4691608.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!