Skip to content

Instantly share code, notes, and snippets.

@dudepare
Last active October 23, 2015 14:10
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save dudepare/7bae319e084ea695687d to your computer and use it in GitHub Desktop.
import unittest
def find_overlap(r1, r2, axis, result):
if axis is 'x':
start = 'x'
distance = 'width'
elif axis is 'y':
start = 'y'
distance = 'height'
p1 = r1[start]
p2 = r2[start]
p_start = max(p1, p2)
p_end = min(p1 + r1[distance], p2 + r2[distance])
if p_start > p_end:
return False
result[start] = p_start
result[distance] = p_end - p_start
return True
def find_intersecting_rectangle(r1, r2):
"""
returns the intersecting rectangle in a dict format
"""
intersect_rect = {}
if find_overlap(r1, r2, 'x', intersect_rect) and \
find_overlap(r1, r2, 'y', intersect_rect):
return intersect_rect
else:
return {}
class TestInstersectingRects(unittest.TestCase):
def test_overlap(self):
r1 = {'x': 0, 'y': 0, 'width': 2, 'height': 2}
r2 = {'x': 1, 'y': 1, 'width': 2, 'height': 2}
r3 = {'x': 1, 'y': 1, 'width': 1, 'height': 1}
self.assertEqual(find_intersecting_rectangle(r1, r2), r3)
def test_enclosed(self):
r1 = {'x': 0, 'y': 0, 'width': 8, 'height': 8}
r2 = {'x': 1, 'y': 1, 'width': 2, 'height': 2}
r3 = {'x': 1, 'y': 1, 'width': 2, 'height': 2}
self.assertEqual(find_intersecting_rectangle(r1, r2), r3)
def test_left_overlap(self):
r1 = {'x': 3, 'y': 0, 'width': 5, 'height': 2}
r2 = {'x': 0, 'y': 0, 'width': 4, 'height': 2}
r3 = {'x': 3, 'y': 0, 'width': 1, 'height': 2}
self.assertEqual(find_intersecting_rectangle(r1, r2), r3)
def test_right_overlap(self):
r1 = {'x': 0, 'y': 0, 'width': 4, 'height': 2}
r2 = {'x': 3, 'y': 0, 'width': 5, 'height': 2}
r3 = {'x': 3, 'y': 0, 'width': 1, 'height': 2}
self.assertEqual(find_intersecting_rectangle(r1, r2), r3)
def test_edge_overlap(self):
r1 = {'x': 0, 'y': 0, 'width': 3, 'height': 2}
r2 = {'x': 3, 'y': 0, 'width': 3, 'height': 2}
r3 = {'x': 3, 'y': 0, 'width': 0, 'height': 2}
self.assertEqual(find_intersecting_rectangle(r1, r2), r3)
def test_overlap_on_point(self):
r1 = {'x': 0, 'y': 0, 'width': 1, 'height': 1}
r2 = {'x': 1, 'y': 1, 'width': 1, 'height': 1}
r3 = {'x': 1, 'y': 1, 'width': 0, 'height': 0}
self.assertEqual(find_intersecting_rectangle(r1, r2), r3)
def test_no_overlap_xaxis(self):
r1 = {'x': 0, 'y': 0, 'width': 1, 'height': 1}
r2 = {'x': 3, 'y': 0, 'width': 1, 'height': 1}
r3 = {}
self.assertEqual(find_intersecting_rectangle(r1, r2), r3)
def test_no_overlap_yaxis(self):
r1 = {'x': 0, 'y': 0, 'width': 1, 'height': 1}
r2 = {'x': 0, 'y': 3, 'width': 1, 'height': 1}
r3 = {}
self.assertEqual(find_intersecting_rectangle(r1, r2), r3)
if __name__ == '__main__':
unittest.main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment