This finds the rotation matrix that aligns the (distorted) set of points "points_distorted" with respect to the
    (perfect) set of points "points_perfect" in a least-square sense.
    :param points_distorted: List of points describing a given (distorted) polyhedron for which the rotation that
                             aligns these points in a least-square sense to the set of perfect points "points_perfect"
    :param points_perfect: List of "perfect" points describing a given model polyhedron.
    :return: The rotation matrix

def find_rotation(points_distorted, points_perfect):
    """
    This finds the rotation matrix that aligns the (distorted) set of points "points_distorted" with respect to the
    (perfect) set of points "points_perfect" in a least-square sense.
    :param points_distorted: List of points describing a given (distorted) polyhedron for which the rotation that
                             aligns these points in a least-square sense to the set of perfect points "points_perfect"
    :param points_perfect: List of "perfect" points describing a given model polyhedron.
    :return: The rotation matrix
    """
    H = np.matmul(points_distorted.T, points_perfect)
    [U, S, Vt] = svd(H)
    rot = np.matmul(Vt.T, U.T)
    return rot