1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| >>> def separate_ranges(a,b):
f=lambda a,b: all(x<b[0] for x in a) or all(x>=b[1] for x in a)
return f(a,b) or f(b,a)
>>> def overlaping_ranges(a,b):
return not separate_ranges(a,b)
>>> def get_overlaping_area(area_a,area_b):
a_xs,a_ys,a_xe,a_ye = area_a
b_xs,b_ys,b_xe,b_ye = area_b
a_x,b_x = (a_xs,a_xe),(b_xs,b_xe)
a_y,b_y = (a_ys,a_ye),(b_ys,b_ye)
if overlaping_ranges(a_x,b_x) and overlaping_ranges(a_y,b_y):
x=sorted(list(a_x+b_x))[1:3]
y=sorted(list(a_y+b_y))[1:3]
return sum(zip(x,y),())
>>> get_overlaping_area((0,0,100,100),(50,50,150,150))
(50, 50, 100, 100)
>>> get_overlaping_area((0,0,100,100),(5,5,95,95))
(5, 5, 95, 95) |
Partager