コード例 #1
0
    def test_reached(self):
        """Tests the reached waypoint algorithm."""
        points = ((19, 7), (20, 21), (-10, 20))
        generator = ExtensionWaypointGenerator(points)

        # Right on top should count as reached
        self.assertTrue(generator.reached(points[0][0], points[0][1]))
        self.assertTrue(generator.reached(points[0][0] + 0.5, points[0][1]))
        self.assertTrue(generator.reached(points[0][0] - 0.5, points[0][1]))
        self.assertTrue(generator.reached(points[0][0] - 0.5, points[0][1] + 0.5))
        self.assertTrue(generator.reached(points[0][0] + 0.5, points[0][1] + 0.5))

        # And reaching the beyond point should count too
        waypoint = generator.get_current_waypoint(points[0][0], points[0][1])
        self.assertTrue(generator.reached(waypoint[0], waypoint[1]))
コード例 #2
0
    def test_get_current_waypoint(self):
        """Tests the extension waypoint generation."""
        points = ((20, 20),)
        generator = ExtensionWaypointGenerator(points)
        # If there's only one point, always return it
        self.assertEqual(points[0], generator.get_current_waypoint(10, 10))
        self.assertEqual(points[0], generator.get_current_waypoint(19, 19))
        self.assertEqual(points[0], generator.get_current_waypoint(21, 19))
        self.assertEqual(points[0], generator.get_current_waypoint(21, 21))
        self.assertEqual(points[0], generator.get_current_waypoint(19, 21))

        # Project through tests
        position = (-100, 20)
        points = ((0, 0), (0, 10), (10, 10), (10, 0), (0, 0), (5, 5), (5, 0), (5, -5), (0, 0))
        generator = ExtensionWaypointGenerator(points)
        self.assertEqual(
            generator.get_current_waypoint(
                position[0],
                position[1]
            ),
            points[0]
        )

        generator.next()
        self.assertTrue(position not in points)

        for index in range(1, len(points)):
            point = points[index]
            previous_point = points[index - 1]
            true_waypoint = point
            waypoint = generator.get_current_waypoint(
                position[0],
                position[1]
            )
            self.assertAlmostEqual(
                Telemetry.relative_degrees(
                    previous_point[0],
                    previous_point[1],
                    true_waypoint[0],
                    true_waypoint[1]
                ),
                Telemetry.relative_degrees(
                    previous_point[0],
                    previous_point[1],
                    waypoint[0],
                    waypoint[1]
                )
            )

            def distance(x1, y1, x2, y2):
                """Returns distance between 2 points."""
                return math.sqrt(
                    (x1 - x2) ** 2 + (y1 - y2) ** 2
                )

            self.assertLess(
                distance(
                    previous_point[0],
                    previous_point[1],
                    true_waypoint[0],
                    true_waypoint[1]
                ) + 1.0,
                distance(
                    previous_point[0],
                    previous_point[1],
                    waypoint[0],
                    waypoint[1]
                )
            )

            generator.next()