learning about conformal geometric algebra 2017

in particular for understanding it well enough to use or implement software based on it

a collection of notes that gets extended as i learn (see the date in the top right of this page for the last modification date)


these are the resources that helped me the most:

clifford algebra: a visual introduction

colapinto - articulating space dissertation. particularly for context

dorst, fontijne, mann - geometric algebra for computer science non-free book. explanations and additionally consideration of some software implementation details. its structure does not seem to be bottom-up

gaviewer tutorial excellent application and tutorial text

suter - geometric algebra primer introduction to the elements and operations. mentions some important details that are often assumed

wild linear algebra youtube video series by n j wildberger about linear algebra, which includes fundamental knowledge for understanding geometric algebra (what are vectors, etc)


gaviewer for experimentation with calculations and visualisation

libvsr c++ template based implementation, which means algebras for different metrics are pre-compiled and fast but perhaps cant easily be run-time created. some additional usage information may be found in the text "articulating space"

reference implementation from the book "geometric algebra for computer science"

sph-cga experimental implementation in scheme based on this text

versor.js javascript port of libvsr


dependent concepts

with currently available material, understanding of the following concepts tends to be assumed in definitions and explanations:

abstract algebra, algebra, bilinearity, codirectionality, coefficient, colinearity, commutativity, coordinate free, covector, dual, eigenbasis, eigenvalue, euclidean geometry, field, homogeneous space, ideal number, linear algebra, linear algebra minor, linear dependence, mathematical closure, matrix, matrix determinant, matrix multiplication, metric, metric signature, metric space, orthogonal, orthonormal, parametric equation, parity of a permutation, permutation, projection, real numbers, scalar, subspace, tensor, tensor product, vector algebra, vector basis, vector cross product, vector dot product, vector spaces, vectors


geometric product
  outer product
  inner product
grade inversion
grade reversal


geometric product

the geometric product is more fundamental than the inner or outer product

inner and outer product can be expressed in terms of the geometric product

the geometric product can be expressed in terms of the inner and outer product

gp(a, b) -> scalar + vector -> multivector

gp(a, a): outer product part equals zero

gp(basis1, basis2): inner product part equals zero

sum between scalar and bivector

linear and associative

commutative only in the case of collinear (op(a, b) = 0) or orthogonal (ip(a, b) = 0) vectors


gp(a, b) = op(a, b) + ip(a, b)
gp(b, a) = ip(b, a) + op(b, a)
gp(b, a) = ip(a, b) - op(a, b)
ip(a, b) = gp(1/2, gp(a, b) + gp(b, a))
op(a, b) = gp(1/2, gp(a, b) - gp(b, a))
gp(a, b) = -gp(b, a) + gp(2, ip(a, b))
gp(b, a) = gp(a, b) - gp(2, op(a, b))

outer product

function signature

op :: k-vector k-vector -> k-vector



op(a, op(b, c)) = op(op(a, b), c)

distributivity, linearity

x, y: scalar

op(a, x * b + y * c) = x * op(a, b) + y * op(a, c)
op(x + y, c) = op(x, c) + op(y, c)


op(a, b) = -op(b, a)
op(a, a) = -op(a, a) = 0

scalar operation

op(x, y) = x * y
op(x, a) = op(a, x) = x * a


alternative names: exterior product, wedge product. the name outer product is often used because of the symmetry with inner product and because interior product has another perhaps more commonly used meaning compared to outer product, which also has different meaning in other contexts

the outer product is not defined to be replaceable by a number except in the zero or scalar case. in many cases it is not further reducible. any possible vector element multiplication or subtraction follows from its properties

the outer product of two 2d vectors is an e1e2 (or e12) bivector that can be represented as an object with only one value, a scale factor. there would be six scale factors for 4d bivectors, three for 3d bivectors. the number of scale factors is determined by the number of irreducible outer products when equation elements are distributed. this corresponds to the grade of blades

grade increasing. k-vector -> (k + 1)-vector

allows the formal specification of subspaces (blades)

associated geometric properties: direction, orientation, magnitude

magnitude(op(a, b)) = norm(a) * norm(b) * sin(angle(a, b))

not inversible

null result if and only if the factors are linearly dependent

colinear: op(a, b) = 0

coplanar: op(a, b, c) = 0

inner product: distance and orthogonality; outer product: area and parallelism

inner product

function signature

ip :: k-vector k-vector -> scalar


ip(a, b) = norm(a) * norm(b) * cos(angle)
ip(a, b) = sum(a1 * b1, ..., an * bn)
sqrt(ip(a, a)) = norm(a)
ip((0, 1), (1, 0)) = 0
ip((0, 20), (3, 0)) = 0
projection(a, b) = ip(a, b) / norm(b)
angle = arccos(ip(a, b) / ip(norm(a), norm(b)))
norm(a) * norm(b) * (cos(pi/2) = 0) = 0
ip(a, b) = multiply(projection(a, b), norm(b))


positivity: ip(a, a) >= 0

symmetry: ip(a, b) = ip(b, a)

linearity, x and y being scalars: ip(a, x * b + y * c) = x * ip(a, b) + y * ip(a, c)


equal to scaling the vector "b" by a factor equal to the length of the orthogonal projection of "a" on "b" (where the right angle is on the "b" side)

two vectors are orthogonal if and only if their inner product is zero

the inner product is the dot product generalised to higher dimensional spaces

in geometric algebra the inner product is not only defined for vectors

grade decreasing. k-vector -> (k - 1)-vector

can be used to calculate lengths/distances and angles between vectors



undual: dedualisation, dual(dual(x)) (perhaps sign issues)

dual(a) = gp(a, pseudoscalar)


calculates intersections of lines, planes, spheres, cylinders, etc

meet(a, b) = ip(dual(a), b)


similarity: (meet: intersection) (join: union)



magnitude and direction

are not specific in shape

magnitude can be thought of as the area

are equal as long as the area is equal. example: op(a, b) = op(2 * a, b / 2)


are combinations of possibly different k-vector types: scalar, bivector, trivector, etc

defined to be the sum of different-grade k-blades, such as the summation of a scalar, a vector, and a 2-vector. a sum of only k-grade components is called a k-vector, or a homogeneous multivector

if a given element is homogeneous of a grade k, then it is a k-vector, but not necessarily a k-blade. such an element is a k-blade when it can be expressed as the wedge product of k vectors

sum of elements of different dimensions


conformal geometric algebra

uses more dimensions for calculation then projects to lower dimensions. operations are particularly generic

no: null vector at origin

ni: null vector at infinity (a point that is infinitely far away from any other point)


are k-vectors that can be build using the outer product

blades represent unit lines, unit areas and unit volumes

often defined to be orthonormal, which means all are orthogonal, which means they are perpendicular to each other with no overlap in dimensions

pseudoscalar: the blade of maximum grade

bi-/trivector: k-vector

only one combination of lower-grade basis vectors is relevant per grade even though multiple combinations/orderings are possible in higher dimensions

number of basis blades

2 ** dimensions

number of blades per grade

d: dimensions, g: grade

d! / (d - g)! / g!


0-blade: scalar

1-blade: vector

2-blade: op(vector, vector)

3-blade: op(vector, vector, vector)

vectors for shapes

multiple vectors can describe shapes. the vectors can be imagined as being chained, with each going into a different dimension

because of associativity, different combinations of sides can describe the same shape


vector space

any set of objects satisfying the following: scalar multiplication, vector addition and null object defined

a vector space seems to define the size/dimensionality of vectors, the type for values and the possible values


the direction of the vectors is perpendicular to each other so they point in separate directions like axis

software implementations

basis blade representation and operations. bitmaps for identifiers, operations like grade, reverse, compare

multivector representation and operations

product calculations: geometric/outer/inner product

use a metric signature

vector base notation

elements are often written as multiples of a unit/basis vector, which can be for example a vector that goes 1 into a distinct direction

a * e1 + b * e2 + c * e3 == [a * e1, b * e2, c * e3] == [a, b, c]


e1: (1, 0, 0)

e2: (0, 1, 0)

e3: (0, 0, 1)

with the outer product

op(a, b) =
  (a2 * b3 - a3 * b2) * op(e2, e3) +
  (a3 * b1 - a1 * b3) * op(e3, e1) +
  (a1 * b2 - a2 * b1) * op(e1, e2)

the outer product for 3d base vectors

projection, rejection

description 1

let c and d be vectors with tails at an origin. let e be a vector with its tail at the head of c meeting d at a right angle. e is the rejection. a vector from the tail of d to the head of of e is the projection

description 2

start with two vectors, introduce a third vector to complete a right triangle. if the first two vectors are not perpendicular, the triangle has two catheti, with the one lying on the second vector being the projection, and the third vector being the rejection


projection(a, b) = ip(a, b) / norm(b)
rejection(a, b) = a - projection(a, b)


a function that can associate a scalar to each possible pair of vectors

distance, length, area, angle, orthogonality, orthogonal maps, projections, rotations and other concepts are based on it

norm = metric(vector-a, vector-a)


p q r notation: positive negative zero

matrix notation: matrix from all inner product combinations of basis vectors

vector notation: numbers from the diagonal of the inner product matrix. length of the signature usually corresponds to dimensionality

only sign and not the magnitude might matter


k-vectors can still have scalars for basis vectors (as far as the outer product it is built with are not further reducible), and the scalars/weights are the coordinates

the norm of the coordinate vector appears to be the diameter of circles and spheres or diagonal of squares

vector norm

calculated using multiplication from elementary arithmetic

(x ** 2 + y ** 2 + z ** 2) // 2


much of geometric algebra can be and is described in a coordinate free way, that means without information about how it would be mapped to coordinates

like with complex numbers, a plus sign might be used but the entities are meant to be kept separated, with the plus sign not having the meaning it has in elementary arithmetic

rules like associativity/distributivity/commutativity define how equations can be reformulated, solved or simplified

algebra concerns relations between entities and what the entities are supposed to represent and much less so how the entities or operations themselves can be represented using for example numbers and arithmetic

an algebra can be "generated"

multiplication from elementary arithmetic might be replaced with the geometric product. then letter combinations and exponents use the geometric product instead of the multiplication of elementary arithmetic. for example x ** 2 then means gp(x, x)

knowledge relation: linear-algebra -> geometric-algebra -> conformal-geometric-algebra

tags: start guide textual mathematics math geometric-algebra