def test_point_in_polygon(self): """Tests point in polygon.""" diamond = ((1, 0), (0, -1), (-1, 0), (0, 1)) for point in ((1, 1), (-1, 1), (-1, -1), (1, -1)): self.assertFalse(Telemetry.point_in_polygon(point, diamond)) self.assertTrue(Telemetry.point_in_polygon((0, 0), diamond)) # ------------- # | * * * | # |*/-\ * /-\*| # |/ * \-/ * \| polygon = ( (0, 0), (0, 4), (8, 4), (8, 0), (6, 2), (4, 0), (2, 2) ) inside = ((1, 1), (2, 3), (4, 3), (6, 3), (7, 1)) outside = ( (2, 1), (6, 1), (8.1, 0.1), (8.1, 3.9), (-1, -1), (100, 0), (0, 100), (100, 100), (-100, -100), (-100, 100), (100, -100) ) for point in inside: self.assertTrue(Telemetry.point_in_polygon(point, polygon)) for point in outside: self.assertFalse(Telemetry.point_in_polygon(point, polygon)) # Test the last segment. The function uses an arbitrary offset, so test # all directions so that we can change the offset and not break. tiny = 0.0001 polygon = ((-tiny, -tiny), (tiny, -tiny), (tiny, tiny), (-tiny, tiny)) self.assertTrue(Telemetry.point_in_polygon((0, 0), polygon)) for point in polygon: point_2 = [i * 2 for i in point] self.assertFalse(Telemetry.point_in_polygon(point_2, polygon)) for point in (-tiny, tiny): point_2 = (point * 2, 0) self.assertFalse(Telemetry.point_in_polygon(point_2, polygon)) for point in (-tiny, tiny): point_2 = (0, point * 2) self.assertFalse(Telemetry.point_in_polygon(point_2, polygon)) for point in polygon: point_2 = (point[0] * 2, point[1]) self.assertFalse(Telemetry.point_in_polygon(point_2, polygon)) for point in polygon: point_2 = (point[0], point[1] * 2) self.assertFalse(Telemetry.point_in_polygon(point_2, polygon))
def test_point_in_polygon(self): """Tests point in polygon.""" diamond = ((1, 0), (0, -1), (-1, 0), (0, 1)) for point in ((1, 1), (-1, 1), (-1, -1), (1, -1)): self.assertFalse(Telemetry.point_in_polygon(point, diamond)) self.assertTrue(Telemetry.point_in_polygon((0, 0), diamond)) # ------------- # | * * * | # |*/-\ * /-\*| # |/ * \-/ * \| polygon = ((0, 0), (0, 4), (8, 4), (8, 0), (6, 2), (4, 0), (2, 2)) inside = ((1, 1), (2, 3), (4, 3), (6, 3), (7, 1)) outside = ((2, 1), (6, 1), (8.1, 0.1), (8.1, 3.9), (-1, -1), (100, 0), (0, 100), (100, 100), (-100, -100), (-100, 100), (100, -100)) for point in inside: self.assertTrue(Telemetry.point_in_polygon(point, polygon)) for point in outside: self.assertFalse(Telemetry.point_in_polygon(point, polygon)) # Test the last segment. The function uses an arbitrary offset, so test # all directions so that we can change the offset and not break. tiny = 0.0001 polygon = ((-tiny, -tiny), (tiny, -tiny), (tiny, tiny), (-tiny, tiny)) self.assertTrue(Telemetry.point_in_polygon((0, 0), polygon)) for point in polygon: point_2 = [i * 2 for i in point] self.assertFalse(Telemetry.point_in_polygon(point_2, polygon)) for point in (-tiny, tiny): point_2 = (point * 2, 0) self.assertFalse(Telemetry.point_in_polygon(point_2, polygon)) for point in (-tiny, tiny): point_2 = (0, point * 2) self.assertFalse(Telemetry.point_in_polygon(point_2, polygon)) for point in polygon: point_2 = (point[0] * 2, point[1]) self.assertFalse(Telemetry.point_in_polygon(point_2, polygon)) for point in polygon: point_2 = (point[0], point[1] * 2) self.assertFalse(Telemetry.point_in_polygon(point_2, polygon))