Making examples for an upcoming open source release :)
Every geometry library needs an orthographic projection cube example, right?
I’m not sure how this #Clojure program could be shorter without losing generality. 🤔

Using CGA (conformal geometric algebra) to find the circumcircle that fits three moving points…

https://en.wikipedia.org/wiki/Conformal_geometric_algebra

#geometer

Using PGA2D (2D Plane-based Geometric Algebra) to explore wallpaper groups. (Still making examples for this library 😆.)

https://en.wikipedia.org/wiki/Plane-based_geometric_algebra

#geometer

Wallpaper group p6: hexagonal lattice, cn-symmetry 6, tiling a decahedron.
#clojure #geometer

(This is @csk's territory, but I'm visiting atm because PGA makes this sort of thing so elegant.)

@jack I previously watched your talk about GA. For my part, I'm still not sure how to exploit a possible connection to patterns and tilings. It's cool that you're making that connection.

Interestingly, my colleague in the computer graphics lab, Stephen Mann, does a lot of research on CGA and PGA, and co-authored a textbook on the subject. I should pick his brain about connections.

@csk In this case it’s just an example for a library I’m getting ready to release. The thing that makes it elegant for this purpose is that reflections and rotations are very easy to specify in PGA. Multiplying a point by a line returns the point reflected over the line, for example.
@jack Yes, the notation is hard to beat! The trouble tends to come in the implementation, where a naive representation of geometric objects tends to require an exponential number of coefficients. I assume there's some nice research to be done in compilation methods for GA that perform static type inference on the objects being processed (which are usually quite tame) and emit efficient code. I haven't looked too hard to see what's already been done in this context.

@csk My library currently has pretty fat arrays for the multivectors, but at least avoids computing the coefficients that always yield zero, &c, so it’s not *miserably* slow.

As you guessed, there are some nice per-algebra tricks, but for the general case using computer algebra techniques to simplify expressions and compile them on the fly is the best way I’ve seen (and I might end up there if I start having perf probs).