def random_directions_bounded_test_1(): # TODO: write actual test r = np.pi / 2 N = 180 random_directions_bounded(ndim=2, radius=r, num_points=N, center=None) random_directions_bounded(ndim=3, radius=r, num_points=N, center=None) random_directions_bounded(ndim=2, radius=r, num_points=N, center=random_direction(2)) random_directions_bounded(ndim=3, radius=r, num_points=N, center=random_direction(3))
def random_directions_bounded_density_3d(center, radius, N): S = random_directions_bounded(3, radius, N, center=center) distances = distances_from(S, center) if not (distances <= radius).all(): invalid = np.nonzero(distances > radius)[0] msg = 'Invalid distances: %s > %f' % (distances[invalid], radius) raise Exception(msg) subs = 6 A = spherical_cap_area(cap_radius=radius) da = A / subs dist = np.zeros(subs, dtype='int') for s in range(subs): lower = s * da upper = lower + da r1 = spherical_cap_with_area(lower) r2 = spherical_cap_with_area(upper) num_here = np.logical_and(distances >= r1, distances < r2).sum() dist[s] = num_here assert dist.sum() == N return DiscreteUniformDistribution(dist, 'Distribution of distances from center')
def random_directions_bounded_check(ndim, radius, N): S = random_directions_bounded(ndim=ndim, radius=radius, num_points=N) r2 = distribution_radius(S) check_reasonable_radius(radius, r2, N)