Beispiel #1
0
    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))