biVector forum

Siggraph 2019 - Course on PGA 31/7/2019

This is a topic for questions/discussions and comments on the 2019 Siggraph course “Geometric Algebra for Computer Graphics”. The course notes, cheat sheets and example code are available on the main site, and both Charles and myself are available for questions, comments and more.

I’ll update this thread and the website after the course with more links and information, so be sure to check back soon.

Hope to see you all there !


Thanks for the great turnout and response yesterday ! I had a blast - no video link yet but the slides are available at :

Typo in the PDF : page 12. The words “no way” are repeated in the first paragraph of section 5.3

1 Like

Hi, @grondilu! Welcome to forum. Thanks for the tip regarding the Course Notes pdf. It appears that I’ve fixed the problem already in the sources but neglected to upload the current version to I’ll do that ASAP! Please share any other typos you notice or questions regarding the content.

1 Like

I like this document but I think it should explain the dual representation in more details. I personally struggle to understand it completely.

Like, IMHO, section 5.2 explains very well the concept of dual vector space :

"For each vector space \mathbf{V} there exists an isomorphic dual vector space \mathbf{V}^*, consisting of dual vectors, or co-vectors. A co-vector \mathbf{\theta} is a linear functional that can be evaluated at a vector \mathbf{v} to produce a real number : \langle\theta, \mathbf{v}\rangle\in\mathbb{R}"

This looks fine to me as this is how I was taught the concept as a math student.

However, this definition, if I’m not mistaken, is never used again later in the document. Instead, in section 7 for instance, discussing \mathbf{P}(\mathbb{R}^*_{2,0,1}), “vectors” are introduced with the normal notation, like \mathbf{e}_1 and \mathbf{e}_2. They are supposed to be co-vectors, not vectors. Maybe they should use a high index notation, \mathbf{e}^i, instead?

Then honestly the table 3 becomes quite mysterious. Where do all these formulas come from? What are the linear functionals we were talked about?

I suppose when we say that for instance that a vector \mathbf{a} represents a line, what we really mean is that the co-vector \mathbf{x} \rightarrow \langle\mathbf{a},\mathbf{x}\rangle=\mathbf{a}\cdot\mathbf{x} represents, through the formula \langle\mathbf{a},\mathbf{x}\rangle=0, an hyperplane which, in projective geometry, corresponds to a line (the intersection of the hyperplane with the plane z=1), but if that’s true it’s implicit in the document and what bothered me was to realize that this does not work so well because of the degenerate basis vector (there is no way the inner product can make any use of the degenerate component since it always disappears).

1 Like

@grondilu: Thanks very much for this post. You raise several points which I’ll try to handle one after the next.
First, you are correct in pointing out that the connection between a linear functional \bf{a} and the line (or in general hyperplane) \langle \bf{a}, \bf{x}\rangle = 0 is not clearly stated in the course notes. I’ll try to make that clearer. It does play an important role.
Secondly, I’d like to address the question of what is a vector and what is a co-vector. For that you need to first understand the difference between Grassmann algebra built upon the vector space V and the dual Grassmann algebra built upon the dual vector space V^* (Sec. 5.8). Setting the projective dimension to be 2 to simplify the discussion: elements of V are points, elements of V^* are lines. Then, 1-vectors of G are points, 1-vectors of G^* are lines. If I refer to a general multivector of G as a vector, then a general multivector of G^* is a co-vector. But if my main interest is in G^* (as in euclidean PGA) then I will refer to a general multivector of G^* as a vector, and the general multivector of G as a co-vector. That is, “vector” and “co-vector” are not absolute terms in the geometric algebra context but relative, depending on the 1-vectors of my Grassmann algebra (and consequently, my geometric algebra). Does that make sense? (I just checked the course notes: I only use “co-vector” twice, both when defining the dual vector space in 5.2. I could make clearer that in the geometric algebra context they have a slightly different meaning.)
Regarding Table 3: It is a formula collection for 2D where some of the formulas are left as exercises for the reader. Before Steven and I created the 2D PGA Cheat Sheet, it served the purpose of showing the reader what is possible with the algebra; now that the cheat sheet is there, it doesn’t have such an important role. If there are formulas that you don’t see how to prove, please post a question.
Finally, regarding your comment on the degenerate metric at the end of your post:
\langle \bf{a}, \bf{x}\rangle means very different things when \bf{a} is a co-vector and \bf{x} is a vector (one case) or when \bf{a} and \bf{x} or both vectors (second case). In the latter case \langle, \rangle is an inner product and in the former case it is the evaluation map of the vector space with its dual. Understanding that difference is key if you’re going to grok PGA. I try to distinguish them when I write. In general \langle,\rangle is the evaluation map. The inner product gets a subscript identifying the metric Q: \langle,\rangle_Q. In the geometric algebra these operations appear as the outer and inner product: \langle \bf{a},\bf{x}\rangle \bf{I}=\bf{a}\wedge \bf{x} and \langle \bf{a},\bf{x}\rangle_Q=\bf{a}\cdot\bf{x}. If the usage in the course notes is inconsistent with this please let me know.
Also see my article on “Geometric algebras for euclidean geometry” for the ramifications of this widespread confusion between evaluation map and inner product. That article may also help you understand why euclidean PGA is built as it is, so that certain features of the course notes are put into a bigger context. Available here:


Thanks for the response.

I now understand the terms “vector” and “co-vectors” as relative and not absolute. Thanks.

I think what bothered me most, and still bothers me a bit, is how implicit it is in the document that an element of the algebra can represent a geometric figure. Because to me, no matter how I look at it, a geometric figure is always a set of elements (called points), not a single one.

Take for instance a line. In \mathbf{P}(\mathbb{R}^*_{2,0,1}), it is represented by a vector \mathbf{a} = a^i\mathbf{e_i}. But as I understand it, this means that such vector, which is actually a linear functional since we’re in dual space, is used to define first the hyperplane \mathcal{P}(\mathbf{a}) = \{\mathbf{x}\in\mathbb{R}_{2,0,1}|\langle\mathbf{a},\mathbf{x}\rangle = 0\} , and then, because we’re in projective space, the line represented by \mathbf{a} is the intersection of \mathcal{P}(\mathbf{a}) with the plane \{x\in\mathbb{R}_{2,0,1}|\langle\mathbf{e_0},\mathbf{x}\rangle =1\}.

I’m only assuming though, but I need something like that if I ever want to understand for instance how the outer product of two lines, \mathbf{a}\wedge\mathbf{b}, can represent their intersection.

Regarding the two different meanings of \langle\mathbf{a},\mathbf{b}\rangle, I think it’s unfortunate. IMHO it would be less confusing if this notation was reserved to the applied mapping of the linear functional \mathbf{a} on the vector \mathbf{b}, while the inner product would always be noted \mathbf{a}\cdot\mathbf{b} where \mathbf{a} and \mathbf{b} are two vectors.

Finally, I’d like to point out that raised indices are used at some point, but only once in the document (in the caption of Figure 6), and with no explanation.

@grondilu: Based on your input, I plan to add a short section to the course notes making clear the connection between linear functionals and the associated geometric primitives.

Notice that it works both ways: if I consider elements of the vector space to be hyperplanes, then I can represent dual elements (points) as the 0-sets of linear functionals defined on hyperplanes. That gives me instead of a plane of points, a “point of planes” (the set of all planes passing through a given point).

Regarding \langle,\rangle: I tend to agree with you. In the course notes I use \langle, \rangle only when I’m reviewing the existing literature. After I’ve introduced geometric algebra, I use \cdot and \wedge.

And regarding the raised indices: please let me know if you have found an instance where I used lowered indices for the standard algebra (as you noticed being used in the diagram). I will correct that since it’s important that the notations for the elements in the two algebras have differing notation.