I am a computer scientist with a passion for computer graphics, and when I discovered GA a year ago, I got immediately seduced by it’s elegance and exception-free approach to construction. I am currently trying to grasp the basics and hope that you wise people can help me with chewing though some of the tougher stuff. One challenge is that my mathematical knowledge is rudimentary at best — I did study some mathematics, but this was over 10 years ago and my courses never went beyond basic analysis and group theory. That is, I can read (and mostly understand) simpler definitions like what a vector space is, but I lack the intuition and the experience in dealing with more complex structures, which makes reading many papers rather difficult for me (as some things which I don’t understand are assumed to be trivial). So I would likely ask you to be patient with me and explain things like I am particularly slow.

In particular, I would like to solidify my grasp on various operations pertaining to GA and relationship between them. For this I am trying to implement an algorithm that would generate operations for a chosen metric, not unlike existing Clifford or Ganja.js libraries.

I think I understand how to properly implement the geometric product itself using the distributive property in combination with the fact that it anti-commutes for 1-blades. What I am doing here is recursively applying the distributive law until I end up with a long sum of 1-blades and then “canonicalise” these blades by “sorting” the bases in order (flipping the sign as I go) and applying the metric to eliminate products of a base vector with itself. This algorithm produces multiplication tables that are identical to what I find here, so I assume it is correct.

Where I am stuck however is implementing the general exterior, the regressive and the inner product. The documents linked in the doc section are not really helping me either (maybe because I lack understanding). I found a really helpful set of definitions on Wikipedia where exterior product and various inner products are defined using the geometric product and grade projection. While it doesn’t really help me in understanding what is going on, it is trivially algorithmized, which at least is something. It is unclear to me however whether these definitions are universally valid or only work for non-degenerate setups (in the common literature the assumption of non-degenerativity seems to be the standard from what I have seen).

Speaking of degenerate metrices, what I am really struggling with is the dual map and the regressive product here. In the SIGGRAPH notes, Charles Gunn defines the regressive product using the dual map, but I do not understand how to construct the dual map in the first place. All other literature I have seen suggests right-multiplying a multivector by the inverse of the pseudo-scalar, but in PGA the pseudo-scalar is not invertible if I understand it correctly. At the same time, people seem to be computing with duals without any issues and Eric Lengyel even provides a multiplication table for his geometric *antiproduct*, which as I understand can be computed using the dual and the regular product, so there must be a general form. I have read multiple topics on these forums, including this one, but I am still very confused. I have also read the section 5.10.2 in the SIGGRAPH notes multiple times, but I do not understand how the Poincar ́e duality map can be operationalized. The notes state that it is defined as x -> x* but this does not really help in implementing the map itself. I have tried to look at the source code in existing libraries but I don’t understand what is going on there.

Thank you in advance for helpful suggestions and your patience.