def get_dead_zones(version): size = size_by_version(version) constant_zones = [ (0, 0, 8, 8), # top left position + format-info (size - 8, 0, size - 1, 8), # top right position + format-info (0, size - 8, 7, size - 1), # bottom left position (8, size - 7, 8, size - 1), # bottom left format info (8, 6, size - 9, 6), # top timing array (6, 8, 6, size - 9) # left timing array ] if version >= 7: constant_zones.append((size - 11, 0, size - 9, 5)) # top version info constant_zones.append( (0, size - 11, 5, size - 9)) # bottom (left) version info alignments_zones = [] alignment_centers = list(permutations(ALIGNMENT_POSITIONS[version - 1], 2)) alignment_centers.extend((x, x) for x in ALIGNMENT_POSITIONS[version - 1]) for center_x, center_y in alignment_centers: alignment_zone = (center_x - 2, center_y - 2, center_x + 2, center_y + 2) if all(not is_rect_overlapping(alignment_zone, dead_zone) for dead_zone in constant_zones): alignments_zones.append(alignment_zone) return constant_zones + alignments_zones
def test_non_overlapping_zones(self): # [-----] [-----] # [ ] [ ] # [_____] [_____] self.assertFalse(is_rect_overlapping((1, 1, 4, 4), (5, 1, 8, 4))) # [--] # [__] # [--] # [__] self.assertFalse(is_rect_overlapping((1, 1, 4, 4), (5, 5, 8, 8))) # [-------] # [_______] # # [-------] # [_______] self.assertFalse(is_rect_overlapping((1, 1, 4, 4), (1, 5, 4, 8)))
def test_overlapping_zones(self): # [-----[-]----] # [ [ ] ] # [_____[_]____] self.assertTrue(is_rect_overlapping((1, 1, 4, 4), (3, 1, 6, 4))) # [-------] # [ [-]----] # [_____[_] ] # [______] self.assertTrue(is_rect_overlapping((1, 1, 4, 4), (3, 3, 6, 6))) # [-------] # [-------] # [_______] # [_______] self.assertTrue(is_rect_overlapping((1, 1, 4, 4), (1, 3, 4, 6))) # a contains b self.assertTrue(is_rect_overlapping((1, 1, 4, 4), (2, 2, 4, 4))) self.assertTrue(is_rect_overlapping((1, 1, 4, 4), (2, 2, 3, 3))) # b contains a self.assertTrue(is_rect_overlapping((2, 2, 4, 4), (1, 1, 4, 4))) self.assertTrue(is_rect_overlapping((2, 2, 3, 3), (1, 1, 4, 4))) # point rect self.assertTrue(is_rect_overlapping((2, 2, 4, 4), (4, 4, 4, 4)))
def get_dead_zones(version): size = size_by_version(version) constant_zones = [ (0, 0, 8, 8), # top left position + format-info (size - 8, 0, size - 1, 8), # top right position + format-info (0, size - 8, 7, size - 1), # bottom left position (8, size - 7, 8, size - 1), # bottom left format info (8, 6, size - 9, 6), # top timing array (6, 8, 6, size - 9) # left timing array ] if version >= 7: constant_zones.append((size - 11, 0, size - 9, 5)) # top version info constant_zones.append((0, size - 11, 5, size - 9)) # bottom (left) version info alignments_zones = [] alignment_centers = list(permutations(ALIGNMENT_POSITIONS[version - 1], 2)) alignment_centers.extend((x, x) for x in ALIGNMENT_POSITIONS[version - 1]) for center_x, center_y in alignment_centers: alignment_zone = (center_x - 2, center_y - 2, center_x + 2, center_y + 2) if all(not is_rect_overlapping(alignment_zone, dead_zone) for dead_zone in constant_zones): alignments_zones.append(alignment_zone) return constant_zones + alignments_zones