RegistrationResults get_random_registration_results(unsigned int n,
                                                    double maximum_shift) {
  RegistrationResults results;
  for (unsigned int i = 0; i < n; ++i) {
    RegistrationResult rr;
    rr.set_random_registration(i, maximum_shift);
    results.push_back(rr);
  }
  return results;
}
RegistrationResults get_evenly_distributed_registration_results(
    unsigned int n_projections) {
  algebra::SphericalVector3Ds vs;
  em2d::internal::semispherical_even_distribution(n_projections, vs);
  RegistrationResults results;
  for (unsigned int i = 0; i < n_projections; ++i) {
    algebra::Rotation3D R =
        em2d::internal::get_rotation_from_projection_direction(vs[i]);
    algebra::Vector2D shift(0.0, 0.0);
    results.push_back(RegistrationResult(R, shift, i, 0));
  }
  return results;
}