Lloyd's relaxation is a cousin of k-means that’s still used for quantization, dithering, and stippling. With the pieces from yesterday, it’s only about 10 lines of code…

https://en.wikipedia.org/wiki/Lloyd's_algorithm
#geometer #geometricalgebra

Another day, another example. I had some extra time in the backseat of a car, an airport waiting area, and a plane, so I did a slightly bigger one. This is the same BYO algebra mesh topology implementation from yesterday being used with CGA2D/CGA3D to make computing Delaunay and Voronoi triangulation easy and *dimension agnostic*. The code is the same for 2D and 3D, just parameterized with functions from the two algebras.
#geometer #geometricalgebra
I have a mesh topology library that takes pluggable algebras. Here’s sphere inversion by creating an icosphere using PGA3D, then inverting it through another sphere using CGA3D. The effect is a bit like Escher’s conformal map visualizations, but on a triangle mesh.
#geometer
Today’s #geometer example. This time it's a random city plan generator that's a mix of some X-Windows screen savers I made on Sun workstations in the 80s, early work by Jared Tarbell, and (most directly) Metropolis by Marcus Volz.

Another #geometer example this morning, this time vector fields…

#Clojure

I made a #Clojure port of this gorgeous coordinate free technique for drawing circular arc splines in PGA2D using #geometer. It will be included in the examples for the library…

https://www.youtube.com/watch?v=m317-cYs8q4

Erster akkurater Plotversuch.
#LEGOPraktikum2026
#GEOMETER

Using PGA3D to illustrate using Coxeter groups to create Platonic solids via reflections.

#clojure #geometer

That feeling when you want to find the circle at the intersection of two spheres and the code is:

(cga/meet sphere1 sphere2)
;; => circle

#clojure #geometer

Here’s an example of a motor in PGA3D creating a spiral of triangles.

A motor is a multivector that combines a rotor (specifies a 3D rotation) with a translator (specifies, naturally enough, a 3D translation). You can then apply this multivector to another to do both at the same time. Clojure's `iterate` is a pleasure here:

(take steps (iterate (fn [s] (map #(transform % motor) s)) shape))

#geometer