poissoned
poissoned
is an Rstats implementation of the poisson disk sampling algorithm from
Bridson’s paper - Fast Poisson Disk Sampling in Arbitrary Dimensions
Notes:
- only implemented the 2d case
- adjusted the algorithm in order to ensure repeatable/tileable samples with minimal artifacts at the joins
- similar in purpose to Will Chase’s package {poissondisc}. However,
poissoned
has a a completely different implementation which ends up being much faster.
Installation
You can install from GitHub with:
# install.packages("devtools")
devtools::install_github("coolbutuseless/poissoned")
Basic Usage
library(poissoned)
set.seed(1)
points <- poissoned::poisson_disc(ncols = 50, nrows = 35, cell_size = 10, verbose = TRUE)
poisson_disc(): 500x350, minimum distance = 14.14
ggplot(points) +
geom_point(aes(x, y)) +
theme_bw() +
coord_fixed() +
theme(
panel.grid = element_blank(),
axis.title = element_blank()
)
Tileability
The points generated from poissoned::poisson_disc()
are tileable in that there
should be minimal artifacts at the joins.
In the graph below, the initial set of points (highlighted in blue) were manually replicated and offset eight times.
Tileability - details
Tileability is achieved by copying edge points to outside the opposite edge - this simulates a toroidal coordinate system such that the canvas wraps around on itself.
These boundary points are retrievable by setting keep_boundary = TRUE
.
In the following plot, the dashed line indicates the limits of the point set, and the blue points are transated points copied from the opposite edge.
points <- poissoned::poisson_disc(ncols = 30, nrows = 20, cell_size = 10, keep_boundary = TRUE, verbose = TRUE)
poisson_disc(): 300x200, minimum distance = 14.14
points$boundary <- with(points, x < 0 | y < 0 | x > 300 | y > 200)
ggplot(points) +
geom_rect(xmin = 0, xmax = 300, ymin = 0, ymax = 200, fill = NA, colour = '#a0a0a0', linetype = 2) +
geom_point(aes(x, y, colour = boundary)) +
theme_void() +
coord_fixed() +
theme(legend.position = 'none')