Sampling
StatsBase.sample
— Methodsample([rng], object, method)
Sample elements or points from geometric object
with method
. Optionally, specify random number generator rng
.
Meshes.SamplingMethod
— TypeSamplingMethod
A method for sampling from geometric objects.
Meshes.DiscreteSamplingMethod
— TypeDiscreteSamplingMethod
A method for sampling from discrete representations of geometric objects such as meshes or collections of geometries.
Meshes.ContinuousSamplingMethod
— TypeContinuousSamplingMethod
A method for sampling from continuous representations of geometric objects. In this case, geometric objects are interpreted as a set of points in the embedding space.
Discrete sampling
UniformSampling
Meshes.UniformSampling
— TypeUniformSampling(size, replace=false, ordered=false)
Sample elements uniformly from a given domain/data. Produce a sample of given size
with or without replacement depending on the replace
option. The option ordered
can be used to return samples in the same order of the domain/data.
grid = CartesianGrid(20, 20)
# uniform sampling without replacement
sampler = UniformSampling(100, replace=false)
blocks = sample(grid, sampler)
viz(blocks)
WeightedSampling
Meshes.WeightedSampling
— TypeWeightedSampling(size, [weights]; replace=false, ordered=false)
Sample elements from a given domain/data using weights
. Produce a sample of given size
with or without replacement depending on the replace
option. The option ordered
can be used to return samples in the same order of the original domain/data. By default weights are uniform.
grid = CartesianGrid(20, 20)
# upper blocks are 10x more likely
weights = [fill(1, 200); fill(10, 200)]
# weighted sampling without replacement
sampler = WeightedSampling(100, weights, replace=false)
blocks = sample(grid, sampler)
viz(blocks)
BallSampling
Meshes.BallSampling
— TypeBallSampling(radius; [options])
A method for sampling isolated elements from a given domain/data according to a norm-ball of given radius
.
Options
metric
- Metric for the ball (default toEuclidean()
)maxsize
- Maximum size of the resulting sample (default to none)
grid = CartesianGrid(20, 20)
# sample blocks that are apart by a given radius
sampler = BallSampling(5.0)
blocks = sample(grid, sampler)
viz(blocks)
Continuous sampling
RegularSampling
Meshes.RegularSampling
— TypeRegularSampling(n1, n2, ..., np)
Generate samples regularly using n1
points along the first parametric dimension, n2
points along the second parametric dimension, ..., np
points along the last parametric dimension.
Examples
Sample sphere regularly with 360 longitudes and 180 latitudes:
sample(Sphere((0,0,0), 1), RegularSampling(360, 180))
grid = CartesianGrid(20, 20)
# sample points regularly
sampler = RegularSampling(20, 30)
points = sample(grid, sampler) |> collect
viz(points)
HomogeneousSampling
Meshes.HomogeneousSampling
— TypeHomogeneousSampling(size, [weights])
Generate sample of given size
from geometric object according to a homogeneous density. Optionally, provide weights
to specify custom sampling weights for the elements of a domain.
grid = CartesianGrid(20, 20)
# sample points homogeneously
sampler = HomogeneousSampling(100)
points = sample(grid, sampler) |> collect
viz(points)
MinDistanceSampling
Meshes.MinDistanceSampling
— TypeMinDistanceSampling(α, ρ=0.65, δ=100, metric=Euclidean())
Generate sample from geometric object such that all pairs of points are at least α
units of distance away from each other. Optionally specify the relative radius ρ
for the packing pattern, the oversampling factor δ
and the metric
.
This method is sometimes referred to as Poisson disk sampling or blue noise sampling in the computer graphics community.
References
- Lagae, A. & Dutré, P. 2007. A Comparison of Methods for Generating Poisson Disk Distributions
- Bowers et al. 2010. Parallel Poisson disk sampling with spectrum analysis on surfaces
- Medeiros et al. 2014. Fast adaptive blue noise on polygonal surfaces
grid = CartesianGrid(20, 20)
# sample points that are apart by a given radius
sampler = MinDistanceSampling(3.0)
points = sample(grid, sampler) |> collect
viz(points)
FibonacciSampling
Meshes.FibonacciSampling
— TypeFibonacciSampling(n, ϕ = (1 + √5)/2)
Generate n
Fibonacci points with parameter ϕ
.
The golden ratio is used as the default value of ϕ
, but other irrational numbers can be used.
See https://observablehq.com/@meetamit/fibonacci-lattices and https://www.johndcook.com/blog/2023/08/12/fibonacci-lattice.
sphere = Sphere((0.,0.,0.), 1.)
# sample points using the Fibonacci lattice method
sampler = FibonacciSampling(100)
points = sample(sphere, sampler) |> collect
viz(points)