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)
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)