コード例 #1
0
    def test_angle_metric_order(self):
        """Test that the closer the angle is to straight line, the smaller it costs is"""
        terrain_map = [[1]*6 for _ in range(7)]
        A = Point(0, 0)
        B = Point(1, 2)
        C = Point(3, 4)
        D = Point(2, 1)
        E = Point(3, 5)
        F = Point(0, 3)
        model = Model(terrain_map, None, None, None, None, None,
                      turn_penalty=lambda x: x**2)
        gentle_angle_weight = model._calculate_turn_penalty([A, B], [B, C])
        harsh_angle_weight = model._calculate_turn_penalty([A, B], [B, D])
        self.assertLess(gentle_angle_weight, harsh_angle_weight)

        zero_angle_weight = model._calculate_turn_penalty([A, B], [B, A])
        self.assertLess(harsh_angle_weight, zero_angle_weight)

        straight_angle_weight = model._calculate_turn_penalty([A, B], [B, E])
        self.assertLess(straight_angle_weight, gentle_angle_weight)

        medium_angle_weight = model._calculate_turn_penalty([A, B], [B, F])
        self.assertLess(medium_angle_weight, harsh_angle_weight)