题目(2018-11-20)
用一个对象的数据来表示一个矩形的位置和大小:
{
x: 100,
y: 100,
width: 150,
height: 250
}
它表示一个宽为150高为250的矩形在页面上的(100, 100)的位置。
请你完成一个函数isOverlap
可以接受两个矩形作为参数,判断这两个矩形在页面上是否重叠。例如:
const rect1 = { x: 100, y: 100, width: 100, height: 100 }
const rect2 = { x: 150, y: 150, width: 100, height: 100 }
isOverlap(rect1, rect2) // => true
实现
一开始的思路是,如果两个矩形重叠,那么必然有一个矩形的任意一个顶点在第一个矩形中,实现之后发现并不是的,这样没有考虑一个矩形完全包围另外一个矩形的情形,这种情况下需要先判断哪一个是比较小的矩形,小矩形的顶点一定在大矩形里面
尝试后发现,下面这种情形也没有考虑进去:
这种情况下,利用顶点来判断重叠就不靠谱了,索性取一个矩形的所有点进行遍历,只要有一个点在内部就立刻退出遍历,然后返回true
<