Saturday AM, a story in two acts...

(Incl. placing crumbs by approaching it like a #PoissonDisk / #BlueNoise problem... πŸ˜…)

#CakeDay

Just posted a new #ThingUmbrella example: Image-based Poisson-disk sampling, using the image brightness as minium distance function between points to spatially vary densities...

Demo:
https://demo.thi.ng/umbrella/poisson-image/

Commented source code (<50 lines):
https://github.com/thi-ng/umbrella/blob/develop/examples/poisson-image/src/index.ts

Benchmark:
31506 points @ 719.10ms
(max. 500 failed attempts to place a point, using a kD-Tree as spatial index)

/cc @nkint

#PoissonDisk #Sampling #Pixel #Graphics #TypeScript #JavaScript #Canvas

Still only on a feature branch, but over the past few days I've been working on updating https://thi.ng/geom to add support for polygons with holes and paths with holes (or more generally support for sub-paths, e.g. multiple curves). Since both of these shape types are containers of multiple geometries and therefore require in some situations (e.g. shape conversions) different handling than the other shapes with a single boundary/geometry, adding support for these also includes updating a dozen or so polymorphic shape operators/functions and unfortunately will involve a few of breaking changes. For instance, some of these functions are returning an array of shapes now, instead of just a single one. Also related, some of the other geom support packages (e.g. https://thi.ng/geom-axidraw, https://thi.ng/geom-sdf) will have to be refactored more and partially have been already (likely only internally, though)...

As part of this work, I've also just added example #160(!!!) to demonstrate & test out some of this new functionality:

Demo:
https://demo.thi.ng/umbrella/geom-complex-poly/

Source:
https://github.com/thi-ng/umbrella/blob/feature/geom-complex-paths/examples/geom-complex-poly/src/index.ts

Commits:
https://github.com/thi-ng/umbrella/compare/feature/geom-complex-paths

I will of course send another update once this all has been merged & released...

#ThingUmbrella #Geometry #Polygons #Shapes #PoissonDisk #TypeScript #JavaScript #OpenSource

Functional, polymorphic API for 2D geometry types & SVG generation

thi.ng/geom

Since some of you seem to like that above animation, here's an interactive version where you can disturb the cells via mouse/touch:

https://demo.thi.ng/umbrella/boids-voronoi/

#Boids #Voronoi #Algorithm #PoissonDisk #ComputationalDesign #Physics #Simulation #GenerativeDesign #ThingUmbrella #TypeScript

Nothing new, but maybe a little unusual: Using boids as alternative to Lloyd relaxation and/or Poisson-disk sampling. The boids here are using only two behaviors: local separation, plus a randomized attractor to create global disturbances. Cell density could also be varied by spatially adjusting the separation distance between boids. Overall convergence/relaxation can be much faster than shown here...

#Boids #Voronoi #Algorithm #PoissonDisk #ComputationalDesign #Physics #Simulation #GenerativeDesign #ThingUmbrella #TypeScript