biVector forum

Translating between the "Bivector" and "Lengyel" models of PGA

Loosely, there seem to be at least two different notations & jargons for describing geometric objects and operators in 3D PGA.

What I’m calling the “BiVector” model: the 2019 Siggraph course, alot of the discussion on, and the Klein library.

And the “Lengyel” model, as outlined at

As I understand it, mathematically, the two models are consistent. But there are alot of differences, both in the jargon used and also in the notation; egs Antivectors, e0 vs e4, “bulk norms”, “weight norms”, “ideal norms”, the way that Points and Planes are represented.

I’d like to develop an ability to mentally translate back and forth between the notational conventions, so as to reconcile the material in both places into one coherent system.

Does anyone have a cheat sheet for mapping between the terminology? or some pointers to how to build such a mapping…

You may or may not be looking for the hodge dual.

Assuredly, the Hodge dual lies at the heart of the differences between presentations.

What I find myself wanting is the expansion of the differences out to the various terms and operators that are mentioned, in places like the Siggraph PGA cheat sheet and Lengyel’s wiki.

To give a practical example of the sorts of questions/doubts in my mind: What Lengyel calls the Bulk Norm would be written as X in the Bivector model…? (solve for X ;P)

Meanwhile, the Siggraph materials talk about Ideal Norm, which doesnt get a mention in the Lengyel model. How does that map across?

Im actually tentatively working out the translation myself, which if nothing else is driving me to understand things better. If I reach something Im confident to share, I’ll post it here.

In Section 7.1 of the course notes, the “bivector” model defines the norm as

\Vert \mathbf x\Vert = \sqrt{|\mathbf x^2|},

where the squaring inside the radical is done with the geometric product. It defines the “ideal norm” (or “infinity norm”) in a case-by-case manner for points, lines, and pseudoscalars without providing a general formula or addressing planes, motors, and reflection operators, and it utterly fails to recognize the symmetry at work.

First, the norm as defined in the course notes isn’t quite correct. It should be

\Vert \mathbf x\Vert = \sqrt{\mathbf x\mathbf{\widetilde x}},

which gets rid of the embarrassing need for the absolute value.

In the “Lengyel” model, the “bulk norm” and “weight norm” are defined as

Bulk norm: \Vert\mathbf x\Vert_\bullet = \sqrt{\mathbf x \mathbin{\char"27D1} \mathbf{\widetilde x}}

Weight norm: \Vert\mathbf x\Vert_\circ = \sqrt{\mathbf x \mathbin{\char"27C7} \mathbf{\utilde x}\vphantom{\mathbf{\widetilde x}}} ,

where \char"27D1 is the geometric product, and \char"27C7 is the geometric antiproduct. For the objects in PGA that we care about, the bulk norm is a scalar, and the weight norm is an antiscalar (pseudoscalar).

The “ideal norm” is mathematically the same as the weight norm, but (incorrectly) dualized to be a scalar instead of an antiscalar. Unfortunately, it cannot be expressed quite as symmetrically because the “bivector” model lacks the antiproduct, but you could write

Ideal norm: \Vert\mathbf x\Vert_\infty = \sqrt{\mathbf x^*\widetilde{\mathbf x^*}} ,

where * is any dualization operator.

Note that because the “bivector” model describes geometries and isometry operators with empty dimensions instead of full dimensions, the meaning of the two norms is reversed. So the “bivector” norm gives you the magnitude of the weight of an object, and the ideal norm gives you the magnitude of its bulk. (Or to use the terminology suggested by the “bivector” crowd, the norm gives you the magnitude of the tangent space aspect of the object, and the ideal norm gives you the magnitude of its positional aspect.)

The projected magnitude or geometric norm of an object \mathbf x, which is the distance from the origin for something regarded as a geometry and half the distance the origin is moved for something regarded as an isometry operator, is given by the ratio of the norms. Using the notation m(\mathbf x) for the projected magnitude here to avoid conflicts with other notation, in the “bivector” model,

m(\mathbf x) = \dfrac{\Vert\mathbf x\Vert_\infty}{\Vert\mathbf x\Vert} = \dfrac{\sqrt{\mathbf x^*\widetilde{\mathbf x^*}}}{\sqrt{\mathbf x\mathbf{\widetilde x}}} ,

and in the “Lengyel” model,

m(\mathbf x) = \dfrac{\Vert\mathbf x\Vert_\bullet}{\Vert\mathbf x\Vert_\circ} = \dfrac{\sqrt{\mathbf x \mathbin{\char"27D1} \mathbf{\widetilde x}}}{\sqrt{\mathbf x \mathbin{\char"27C7} \mathbf{\utilde x}\vphantom{\mathbf{\widetilde x}}}} .

(Note: with the appropriate definitions of wedge and dot products involving scalars, all of the geometric products above can be replaced with dot products and antidot products.)

1 Like

Hi @elengyel
Thanks for the detailed comments regarding the ideal norm.
First, a quick feedback regarding the course notes. Since February, 2020, motivated partly by a discussion on this forum, the section in the course notes on the ideal norm has included a subsection entitled “Ideal norm via Poincare duality” which I include here:

Another neat way to compute the ideal norm is provided by Poincare duality. The discussion of Poincare duality above … took place at the level of the Grassmann algebra. It’s possible to consider this map to be between geometric algebras, in this case, J: P(\mathbb{R}^*_{2,0,1})\rightarrow P(\mathbb{R}_{2,0,1}). We leave it as an exercise for the reader to verify that for ideal \mathbf{x} \in P(\mathbb{R}^*_{2,0,1}), \| \mathbf{x} \|_\infty = \| J(\mathbf{x})\| (where by sleight-of-hand the scalar on the right-hand side is interpreted as a scalar in P(\mathbb{R}^*_{2,0,1})). That is, the ideal norm in the euclidean plane is the ordinary norm in the dual euclidean plane. Naturally the same holds for arbitrary dimension. Whether this \quot{trick} has a deeper meaning remains a subject of research.

(Perhaps you have an older copy? I’m constantly updating them as my views on the subject develop. Best place to remain updated is

Note that this section also addresses the issue of whether the ideal norm should be considered a pseudoscalar or a scalar in the original algebra and acknowledges the need for further research, exactly the sort which your post contains.

I have been planning for weeks to post a reply to the original message on this thread: I think it’s misleading to refer to a monolithic “bivector” model: there are some quite sharp differences among the views represented there. And if and when I get around to that, I’ll try to address the interesting points you make regarding the bulk and weight norms.

1 Like