This is a response to the criticism in a recent post called Projective Geometric Algebra Done Right of work done in the 2019 SIGGRAPH presentation “Geometric Algebra for Graphics Engineers” (I did not personally create the SIGGRAPH presentation, but I do subscribe to its conclusions). I mean no ill-will to the author (I even have a couple of his books!), but felt somewhat compelled to write this response because I believe the view espoused actually prevents a more intuitive grasp of the concepts therein. Central to the debate is how geometers should represent projective space algebraically. Namely, what possible representations are there and what are the tradeoffs? I can’t get into the entirety of Geometric Algebra in just a blogpost (that will need to be a longer form writeup), so be advised that this is written for people that have had some brushes with GA already. All quoted text in this article is lifted verbatim from the source material as of this writing. So without further ado, let’s dig into it.

The conventional way in which publications teach you how to transform a point p with a dual quaternion is to first turn p into the dual quaternion 1 + εipx + εjpy + εkpz, evaluate the product (qr + εqd)(1 + εipx + εjpy + εkpz)(q̃r + εq̃d), and then pick off the coefficients of the εi, εj, and εk terms to retrieve the result. This is a hack. What it’s really doing is casting p as a translation operator, transforming that operator with the dual quaternion, and then casting back to a point. It doesn’t extend to the richer set of geometric objects available in ℝ3,0,1, which include vectors, bivectors, points, lines, and planes.

Let’s address this comment first. Representing a point $\mathbf{p}$ as $1 + \epsilon(p_x\mathbf{i} + p_y\mathbf{j} + p_z\mathbf{k})$ might be characterized as a hack, but only because it’s being represented as a bivector. It isn’t being casted “as a translation operator” which implies that it carries with it a group action or product of some sort. It could be argued (which is the crux of his post) that there is a more “natural” representation as a vector sum (as opposed to a trivector sum), so let’s see if that holds up.

[Dual quaternions don’t] extend to the richer set of geometric objects available in ℝ3,0,1, which include vectors, bivectors, points, lines, and planes.

I mostly agree with this. The dual quaternion is a subalgebra of the full geometric algebra after all. It does support more than just points, but let’s continue…

In their SIGGRAPH 2019 course “Geometric Algebra for Computer Graphics”, the presenters point out that general QxQ̃ transformations can be achieved by “turning the algebra on its head” and working with the so-called dual construction. In this formulation, homogeneous vectors represent planes, and homogeneous trivectors represent points, which is the opposite of what makes intuitive sense with respect to the dimensionality of those geometric objects. (Lines are still represented by homogeneous bivectors, but the parts that correspond to the direction and moment are reversed.) This way of doing things is a giant kludge that misses an important part of the big picture, and I find it particularly disagreeable due to the problems that it causes. I’ll get back to those below.

Here I’m going to pause and say that calling this a “giant kludge that misses an important part of the big picture” strikes me as pretty unnecessarily flowery language to say the least. We still haven’t gotten to what the author deems “unintuitive” so let’s skip to that step where the key points are summarized and address them in turn. edit: it appears that since authoring this post, the language in the original post has been edited

Their model requires that points be represented by trivectors and planes be represented by vectors. This is backwards. In 4D projective space, points should be one-dimensional, and planes should be three-dimensional. The projection into 3D space removes a dimension and should naturally make points zero-dimensional and planes two-dimensional, but that’s not what they have. Furthermore, swapping points and planes has serious implications for nonorthogonal change-of-basis transformations, which happen in computer graphics all the time, but they completely ignore this issue.

My interpretation of this objection is that because points are “zero-dimensional” entities in 3D, in 4D (where we tack on a dimension and embed $\mathbb{R}_3$), the point should be “one-dimensional.” This strikes me as an odd requirement to say the least. Points are “zero-dimensional” regardless of what dimension you refer to them in! Similarly lines span a single dimension, planes two dimensions, etc. What I think the author is trying to say is that to map from a geometric entity in $\mathbb{R}_4$ to $\mathbb{R}_3$, we “should” use a geometric entity that spans one additional dimension than what we are trying to model. This is where I think my opinion (and those of other practitioners in this field) will start to diverge from the author’s viewpoint. Here, the claim is made that, in essence, a ray-plane intersection (vector onto a plane) is the correct choice for representing points, in contrast to a 3-plane intersection. I haven’t yet said why I think the latter is more natural in this context, but surely it should be clear that such a claim is made with no justification beyond “feeling.”

The notion of “dimension” is important to clear up here. Points, from the perspective of physics perhaps, might be considered as “zero-dimensional” in that they occupy an infinitesimal amount of space. Mathematically however, this is not the notion of dimensionality that is consistent with the rules of Algebra. The dimensionality of an entity depends on the field or space we operate in. For example, if we take the Cartesian plane, a “point” is two-dimensional. It requires two coordinates to specify its location. If we define planes as our basis in 3D projective geometry, points are three-dimensional in the sense that three planes are required to specify one. The other ambiguity is that we can consider the dimension spanned by the basis elements that comprise of an entity. The point is that because there are multiple notions of dimensionality at play, I don’t believe it behooves us to prioritize one notion in the choice of our representation over any other.

The second point here is that points and planes are “swapped” somehow which also, is not true. Planes are still planes. Points are still points. What is simply being defined is the manner in which they are embedded in the space in relation to the metric which is $\mathbb{R}_{(3, 0, 1)}$. It is this metric that will ultimately dictate what embedding makes the most sense. If what is meant is that the coordinate basis needs to change… well that’s a given. When you transfer from one algebra to the next, we generally don’t retrofit one algebra to ensure that the basis aligns perfectly with the other. What ends up happening is we inject the coordinates with the correct signs, at the right alignment (in our constructor or what have you). After all, we’ve been doing this with quaternions for decades, moving from a standard Cartesian basis to the Quaternionic one. Non-orthogonal changes of basis aren’t really relevant in this discussion. The statement only makes sense if you enter the discussion with the notion that planes are somehow built from points, as opposed to the opposite notion that points are built by intersecting planes.

Because points and planes are backwards, the geometric meaning of the wedge and antiwedge products are also necessarily backwards. Their model requires that ∧ corresponds to a dimension-decreasing meet operation and ∨ corresponds to a dimension-increasing join operation, but in the Grassmann algebra used by the rest of the world, the meanings are the other way around.

This is factually incorrect and can be disproven trivially. The exterior product of $\mathbf{e_0}$ and $\mathbf{e_0}$ is exactly zero regardless of what metric you work in. But aside from that, this statement amounts to saying that the “rest of the world” leverages exclusively an inner-product-null-space view (IPNS) as opposed to an outer-product-null-space view (OPNS) which is also factually incorrect. In some contexts, OPNS is more natural, and certainly no less valid. In terms of grade-increasing, in PGA, the wedge product still increases the grades of the elements. What the author means to say here is that the grade reflects the complement of the entity represented, as opposed to the entity’s dimensionality as he would like. This is the same objection as the point above. How geometric entities behave in this space should be the same as any other. The mapping to $\mathbb{R}_3$ which demands a surjection is the point of confusion.

The next point made in the author’s summary is that normalization is backwards (in the same sense that everything else is backwards) because Cartesian points, lines, and planes are all dualized in this representation. Instead of addressing it directly though, I really need to talk about why the dualized representations were used in the first place. Note that this is in no way my invention. Thinking in terms of dual spaces and dual maps has been a large topic in mathematics for a long time, and much of my understanding is due to great mathematicians such as Poincare, Klein, as well as countless others that have built on top of their work and written great material about it. The first thing to realize is that, in $\mathbf{P}(\mathbb{R}^*_{(3, 0, 1)})$, vectors … are still vectors. Bivectors are still bivectors, trivectors are still trivectors. The geometric interpretation of all of those entities do not change. The fact that there is a correspondence between points in $\mathbb{R}_3$ to trivectors in $\mathbf{P}(\mathbb{R}^*_{(3, 0, 1)})$, is something that takes effect once we are ready to map the results of our computation back to $\mathbb{R}_3$. Note that at this stage, we don’t even care about the metric of the latter space. In the former space however, normalization occurs exactly as you’d expect. The norm of a motor, for example, is just $\mathbf{m}\mathbf{\tilde{m}}$. It simply doesn’t matter what the original meaning of the coordinates were prior to our embedding.

The reason this bears repeating is that when we are in $\mathbf{P}(\mathbb{R}^*_{(3, 0, 1)})$, the geometric product, exterior product, contractions, inner products, etc all work as they did before with any other metric signature, in any dimension. For example, the geometric product between two vectors can produce a reflection via the sandwich product. The next detail we need to look at is the metric signature $(3, 0, 1)$. The $1$ in the third component here signifies that there exists a single vector basis element that squares to 0 (conventionally, $\mathbf{e_0}^2 = 0$). With this, the stage is set to determine how we should proceed.

The first thing to consider is the inner product, which is what we use to measure angles. Suppose we represent planes as trivectors as proposed in the article such that a homogeneous plane looks like $n_x\mathbf{e_{230}} + n_y\mathbf{e_{310}} + n_z\mathbf{e_{120}} + d\mathbf{e_{321}}$ (note that I am using $e_0$ as the element that spans the ideal axis instead of $e_4$ since this is an established convention that fixes the ideal axis at zero regardless of the dimensionality of the space of interest). The dot product of two planes with this convention produces something that depends only on the homogeneous coordinates. Already we’ve just lost an operation for ostensibly no reason. In contrast, if we take a plane in the dual sense expressed as its normal vector $n_x\mathbf{e_1} + n_y\mathbf{e_2} + n_z\mathbf{e_3} + d\mathbf{e_0}$, the dot product corresponds exactly to the angle between the two planes. This wasn’t an accident either. The ideal component squaring to zero as a result of the degenerate metric has an interesting side effect of “squashing distances” in the ideal plane. This is why, despite the author’s claims, there isn’t a strict symmetry between the two operations.

Now, it’s important to realize that the reason why the author needed to introduce a new “geometric antiproduct” was honestly to sidestep this issue and move the zeroes of the Cayley table to the right place to work. You’ll notice that in the cheatsheet he provides here, there is no mention of the inner product. This is because we’d need to invent some sort of “inner antiproduct” or somesuch contraption to make things work as you’d expect. By the same token, we lose the ability to express projections and rejections of elements as well (all of which require the inner product measure to function correctly). At a certain point, it feels like we’ll end up fighting the framework more in the name of something that is “more intuitive.” Unfortunately, what results is frankly something far less intuitive. It’s unclear in the “new” framework “done right” what, if any, use there is for the inner product, or geometric product in this context. Such products have meaning regardless of the metric signature, and if there is a hack here, it’s the claim that the issue is with the geometric product itself (and replacing it with a bunch of new concepts, the anti-reverse, the anti-product, etc). In the space containing our embedding, the geometric product works, just as it always did. In contrast, the the “anti-product” (which frankly, conveys little intuition on its own) simply attempts to sidestep the issue by redefining the metric to be $(1, 0, 3)$ for a single operation.

OK that was inner product-measures (which includes projections/rejections). What about reflections? In “normal” GA, a sandwich of an entity (regardless of if its a point, plane, etc) with a vector will reflect that entity about the vector. Ergo, $\mathbf{pXp}$ will reflect $\mathbf{X}$ about $\mathbf{p}$ (here the plane $\mathbf{p}$ is given in the dual sense in terms of its normal vector). The equivalent formulation given with the author’s cheatsheet involves two geometric anti-products and an anti-reverse.

The only point at which things start to appear “normal” again, frankly, is when we finally see the motor operations (and translations and rotations), and only because the multiplication tables have been specifically crafted for this particular set of operations. Everything that it is built on is largely inconvenienced or without sound mathematical justification. Even the multiplication table of the “geometric antiproduct” is somewhat bizarre. For example, $\mathbf{e_2}^2 = 1^2 = \mathbf{e_{31}}^2 = \dots = 0$, but the pseudoscalar is exactly unity. Why does this not qualify as a “hack” or a “kludge?” Just looking at the table alone, it’s clearly a particularly awkward relabeling of all the original basis elements to “hide” the duality of the space.

The multiplication table is even weirder when we consider how it might generalize to other dimensions. Even if you only ever intend on working in, say, 3D, seeing how a concept generalizes is a useful way to detect a “smell” as it were in the formalism. Incidentally, this is how you might determine that somehow, the inner product is far more fundamental than the cross-product (the latter only works in exactly 3 dimensions, and lacks associativity). Let’s start by looking at a simple rotor in $\mathbf{P}(\mathbb{R}^*_{(2, 0, 1)})$ which is given as $\cos\frac{\alpha}{2} + \sin\frac{\alpha}{2}\mathbf{p}$ where $\mathbf{p}$ is a dual-Euclidean point. Expressed in the “alternative view,” the rotor would look like $\cos\frac{\alpha}{2}\mathbf{e_{123}} + \sin\frac{\alpha}{2}\mathbf{p'}$ where $\mathbf{p'}$ is a vector that maps the point we wish to rotate about. The immediately evident tradeoff is the presence of the mysterious $\mathbf{e_{123}}$ factor that’s needed to make the so-called “antiproduct” work. Why is this strange? Well, we know that rotations are an immediate consequence of the exponential map which gives us the rotation action at a tangent frame. An exponential has the form $1 + x + \frac{x^2}{2}-\dots$ so we could easily derive the standard rotor definition in a closed form. In contrast, the new form of a rotor bears little resemblance to this ubiquitous power expansion, mainly because everything has been shuffled around.

Note also that the rotor and motor elements in the standard formulation occupy the even-subalgebra (generally written as $C\ell^+_n$). The even sub-algebra is known to generate rotations in any dimension and are generated by the bivectors. The author makes a separate claim in a twitter thread that due to symmetry, his “odd subalgebra” works just as well. This only makes sense if you’re willing to accept that with his product, 1 times 1 is, well, 0. The scalar quantity present in the even-subalgebra is an encoding of “measure” with respect to the metric as-defined. Trying to frame things in terms of the “odd-subalgebra” (which has scant mention in any literature) necessarily pushes the responsibility to some other element which in the author’s case, is the coefficient of the pseudoscalar. That is… odd to say the least. Again, we must ask, why is this more intuitive? Is this not “backwards” relative to the formalism as stated? What’s stranger still about his new algebra, is that the parity of the subalgebra changes with dimension! Because the identity element is now associated with the pseudoscalar, the motor subalgebra is odd in 2D, then even, then odd again.

Summarizing, it strikes me that the main motivations for going down the path of the “geometric antiproduct” was a belief that points, lines, and planes in 1-up space should be represented a certain way, and proceeding based on that belief. To the contrary, a more sound approach would have been to recognize that there are at least two mappings to get between projective space and Euclidean space, and seeing how the entities behave under various group/algebraic operations and symmetries would have dictated which representation makes the most sense. To do otherwise is putting the cart before the horse, so to speak. The algebra must serve the geometry, not the other way round. The fact that when doing projective geometry, the algebraic manipulation relies on representing a plane as its normal, or that the point should be represented as a trivector is OK. Once the conversion is done, we may trust that all identities and relations proved function properly for vectors, bivectors, and trivectors, and we can faithfully compute with them until the time to read off the result based on our interpretation is done. Instead, the author chose to force an interpretation of entities a particular way (the dual approach was deemed “backwards”) and so he had to invert the reversion operator, invert the geometric product’s Cayley table, and invert the subalgebra itself. In the process, we also needed to abandon a wealth of established conventions, theorems, and literature. Is the new upside-down world of special-cases and mathematical artifacts more intuitive? Personally, I don’t think it’s worth the trouble.