示例#1
0
    def test_stable_rotation_around_z(self):
        starting_p = vector_utils.normalized([1, 1, 1])[0]
        z_vec = [0, 0, 1]
        angle = math.radians(15)
        # Check old distance
        arc_dist_before = cartesian_utils.cartesian_arc_distance(starting_p, z_vec)
        # Rotate starting_p around z
        new_p = vector_utils.rotate_about_arbitrary_axis_in_radians(starting_p, z_vec, angle)
        # Check new distance
        arc_dist_after = cartesian_utils.cartesian_arc_distance(new_p, z_vec)

        self.assertEqual(arc_dist_before, arc_dist_after)
示例#2
0
    def test_arc_dist_same_over_rotation(self):
        starting_p = vector_utils.normalized([1, 1, 1])[0]
        min_angle = math.radians(15)
        max_angle = math.radians(16)
        spin_angle = math.radians(50)
        # Generate twice.. should be deterministic
        near_p = cartesian_utils.rotate_to_vec_in_anulus_in_radians(starting_p, min_angle, min_angle, spin_angle)
        far_p = cartesian_utils.rotate_to_vec_in_anulus_in_radians(starting_p, max_angle, max_angle, spin_angle)
        first_anulus_arc_width = cartesian_utils.cartesian_arc_distance(near_p, far_p)

        # Still same angle between them
        min_angle = math.radians(5)
        max_angle = math.radians(6)
        near_p = cartesian_utils.rotate_to_vec_in_anulus_in_radians(starting_p, min_angle, min_angle, spin_angle)
        far_p = cartesian_utils.rotate_to_vec_in_anulus_in_radians(starting_p, max_angle, max_angle, spin_angle)
        second_anulus_arc_width = cartesian_utils.cartesian_arc_distance(near_p, far_p)
        # Allow some tolerance
        self.assertAlmostEqual(first_anulus_arc_width, second_anulus_arc_width)