js判断两个盒子是否重叠的代码
时间: 2023-05-18 11:03:13 浏览: 60
以下是一种判断两个盒子是否重叠的 JavaScript 代码:
function isOverlap(box1, box2) {
var rect1 = box1.getBoundingClientRect();
var rect2 = box2.getBoundingClientRect();
return !(
rect1.bottom < rect2.top ||
rect1.top > rect2.bottom ||
rect1.right < rect2.left ||
rect1.left > rect2.right
);
}
其中,box1 和 box2 是两个 DOM 元素,getBoundingClientRect() 方法可以获取元素的位置和大小信息。函数返回值为 true 表示两个盒子重叠,否则返回 false。
相关问题
判断两个多边形是否重叠的代码
判断两个多边形是否重叠,可以采用SAT(Seperating Axis Theorem) 分离轴定理的方法,该方法适用于判断任意形状的多边形是否重叠。以下是Python代码示例:
```python
def overlap_polygons(p1, p2):
"""
判断两个多边形是否重叠
:param p1: 第一个多边形的顶点坐标,格式为 [(x1, y1), (x2, y2), ...]
:param p2: 第二个多边形的顶点坐标,格式为 [(x1, y1), (x2, y2), ...]
:return: 如果两个多边形重叠,则返回 True,否则返回 False
"""
def get_projected_axis(poly):
"""
获取多边形在投影轴上的投影
"""
axes = []
for i in range(len(poly)):
p1 = poly[i]
p2 = poly[(i+1)%len(poly)]
edge = (p1[1] - p2[1], p2[0] - p1[0])
length = (edge[0]**2 + edge[1]**2)**0.5
axis = (edge[0]/length, edge[1]/length)
axes.append(axis)
return axes
def get_projection(poly, axis):
"""
获取多边形在投影轴上的投影区域
"""
min_p = max_p = sum_p = dot_product(poly[0], axis)
for p in poly[1:]:
projection = dot_product(p, axis)
sum_p += projection
if projection < min_p:
min_p = projection
elif projection > max_p:
max_p = projection
return (min_p, max_p, sum_p / len(poly))
def dot_product(p, axis):
"""
计算点和向量之间的点积
"""
return p[0]*axis[0] + p[1]*axis[1]
def overlap_on_axis(poly1, poly2, axis):
"""
判断两个多边形在某个投影轴上的投影是否重叠
"""
p1_min, p1_max, p1_avg = get_projection(poly1, axis)
p2_min, p2_max, p2_avg = get_projection(poly2, axis)
overlap = max(p1_min, p2_min) <= min(p1_max, p2_max)
if overlap:
return max(p1_avg, p2_avg) - min(p1_avg, p2_avg)
else:
return 0
axes = get_projected_axis(p1) + get_projected_axis(p2)
for axis in axes:
overlap = overlap_on_axis(p1, p2, axis)
if overlap == 0:
return False
return True
```
以上代码只是示例,实际应用时需要根据具体情况进行修改。
判断两个区域是否有重叠的C++代码
可以使用坐标轴上的区间重叠算法来解决这个问题。该算法通过比较两个区间的起点和终点来判断是否有重叠。以下是该算法的 C 代码实现:
#include <stdio.h>
struct Interval {
int start;
int end;
};
int isOverlap(struct Interval int1, struct Interval int2) {
if (int1.start > int2.end || int2.start > int1.end) {
return 0; // 没有重叠
}
else {
return 1; // 有重叠
}
}
int main(void) {
struct Interval int1 = {1, 5};
struct Interval int2 = {3, 7};
if (isOverlap(int1, int2)) {
printf("Two intervals overlap.\n");
}
else {
printf("Two intervals do not overlap.\n");
}
return 0;
}
这个程序会输出 "Two intervals overlap.",因为 int1 和 int2 有重叠。
注意:该算法只适用于一维空间中的区间重叠判断。如果需要判断二维或三维空间中的区域重叠,需要使用其他算法。