Clean up your mesh!

Steven De Keninck

Plane and Simplex

University of Amsterdam

(paper with Martin Roelfs, Leo Dorst, David Eelbode)

Clean up your mesh!

Steven De Keninck

University Of Amsterdam

Every geometric algebra talk:

  • grading

  • incidence

  • the geometric product

  • metric signature 

  • meet/join

  • complex structure

  • rotors

  • bivector Lie algebra

  • projective embedding

  • conformal embedding

  • spin groups

  • the Euclidean split

  • Cartan–DieudonnĂ©

  • duality

  • pseudoscalar

  • versors

  • outermorphisms

  • reciprocal frames

it's all very simple.

Clean up your mesh!

So what is a geometric algebra?

Clifford Algebra

Embedding Function

\(\mathbb R_{p,q,r}\)

How do we represent geometry?

\(\mathbb R_{3,0,1}\)

\(ax + by + cz + d = 0\)

\( \Rightarrow a\mathbf e_1 + b\mathbf e_2 + c\mathbf e_3 + d\mathbf e_0\)

\([x,y,z] \)

\( \Rightarrow (x\mathbf e_1 + y\mathbf e_2 + z\mathbf e_3 + \mathbf e_0)^*\)

\( \mathbf e_1^2 =\mathbf e_2^2 =\mathbf e_3^2 = +1 \)

\( \mathbf e_0^2 = 0 \)

\(\mathbf e_i\mathbf e_j = -\mathbf e_j\mathbf e_i\)

PGA

Projective/Homogeneous/Affine

Clean up your mesh!

So what is a geometric algebra?

Clifford Algebra

\( \text{CL}(V,Q) = T(V)  /  \langle  v \otimes v - Q(v) \mathbf 1\rangle \)

Quadratic Form Q

e.g:

 \(\quad x^2 + y^2 + z^2\)

 \(\quad x^2 + y^2 + z^2 - t^2\)

\(\vec a = \begin{bmatrix}x\\y\\z\end{bmatrix} \iff a = x \mathbf e_1 + y \mathbf e_2 + z \mathbf e_3\)

\(a\otimes a = aa = a^2 = x^2 + y^2 + z^2\)

but what about \(\mathbf e_1 \mathbf e_2 \) or \(\mathbf e_2 \mathbf e_1 \)?

\(\mathbf e_1 \mathbf e_2 + \mathbf e_2 \mathbf e_1 = (\mathbf e_1 + \mathbf e_2)^2 - \mathbf e_1^2 - \mathbf e_2^2 \)

1

1

2

\(\mathbf e_1 \mathbf e_2 + \mathbf e_2 \mathbf e_1 = 0 \iff \mathbf e_1 \mathbf e_2 = - \mathbf e_2 \mathbf e_1 \)

\(\mathbf e_i^2 \in \{-1,0,1\} \)

\(\mathbf e_i\mathbf e_j = -\mathbf e_j \mathbf e_i \)

Clean up your mesh!

So what is a geometric algebra?

Geometry Embedding Function

Clean up your mesh!

The periodic table of PGA elements.

Clean up your mesh!

Geometric Algebra For Computer Geometry

\(ab\) : compose transformation a after b

\(a \wedge b\) : meet/intersect elements a and b

\(a \vee b\) : join/span elements a and b

\(a \cdot b\) : orthogonal complement

plane : \( a \mathbf e_1 + b \mathbf e_2 + c\mathbf e_3 + d\mathbf e_0\)
point : \((x\mathbf e_1 + y\mathbf e_2 + z\mathbf e_3 + \mathbf e_0)^*\)

norm : \(\lVert x \rVert = \sqrt{x\tilde x}\)

ideal norm : \(\lVert x \rVert_\infty = \lVert x^* \rVert \)

More info on BIVECTOR.NET !!!

Clean up your mesh!
Clean up your mesh!

262 lines of code !!!!!!!!

Clean up your mesh!

We'll use only two tools.

Join / Vee / Regressive Product

Euclidean and Ideal norm.

\((a \vee b)^* = a^* \wedge b^*\)

\(\lVert x \rVert = \sqrt{x\tilde x}\)

\(\lVert x\rVert_\infty = \lVert x^* \rVert = \lVert o \vee x \rVert\) 

\(a \vee b = -b \vee a\)

\(a \vee a = 0\)

\(a \vee (b + c) = a \vee b + a \vee c \)

\(x = a\mathbf e_1 + b\mathbf e_2 + c\mathbf e_3 + d\mathbf e_0 \)

\(\lVert x \rVert = \sqrt{a^2 + b^2 + c^2} \)

\(\lVert x \rVert_\infty = \sqrt{d^2}\)

Clean up your mesh!

Join / Vee / Regressive Product

\((a \vee b)^* = a^* \wedge b^*\)

Clean up your mesh!

The join of two points.

\(a \vee b = -b \vee a\)

\(a \vee a = 0\)

\(a \vee (b + c) = a \vee b + a \vee c \)

\(a \vee b\)

\(a \vee (a + l\mathbf d) \)

\(\lVert a \vee b \rVert = \lvert l \rvert = \text{length segment}\)

Clean up your mesh!

The join of three points.

\(a \vee b = -b \vee a\)

\(a \vee a = 0\)

\(a \vee (b + c) = a \vee b + a \vee c \)

\(a \vee b \vee c\)

\(a \vee b \vee (\alpha a + \beta b + h\mathbf d) \)

\(\lVert a \vee b \vee c \rVert = \lvert lh \rvert = 2 \times \text{area triangle}\)

\(\lVert a \vee b \rVert = \lvert l \rvert = \text{length segment}\)

Clean up your mesh!

The \(k\)-magnitude of a \(k\)-simplex.

\(a \vee b = -b \vee a\)

\(a \vee a = 0\)

\(a \vee (b + c) = a \vee b + a \vee c \)

\(\lVert a \vee b \vee c \rVert = \lvert lh \rvert = 2 \times \text{area triangle}\)

\(\lVert a \vee b \rVert = \lvert l \rvert = \text{length segment}\)

\(\lVert a \vee b \vee c \vee d \rVert = 6 \times \text{volume tetra}\)

\({1 \over k!} \lVert v_0 \vee \dots \vee v_k \rVert\)

in classic linear algebra :

\( \lVert \vec b - \vec a \rVert \)

\( \lVert (\vec b - \vec a) \times (\vec c - \vec a) \rVert \)

\( \lVert ((\vec b - \vec a) \times (\vec c - \vec a)) \cdot (\vec d - \vec a) \rVert \)

Clean up your mesh!

The \(k\)-magnitude of a \(k\)-simplex.

\(a \vee b = -b \vee a\)

\(a \vee a = 0\)

\(a \vee (b + c) = a \vee b + a \vee c \)

\({1 \over k!} \lVert v_0 \vee \dots \vee v_k \rVert\)

\(\lVert a \vee b \vee c \rVert = \lVert o \vee b \vee c \rVert + \lVert o \vee c \vee a \rVert + \lVert o \vee a \vee b \rVert\)

\(\lVert a \vee b \vee c \rVert = \lVert o \vee b \vee c + o \vee c \vee a + o \vee a \vee b \rVert\)

\(\lVert a \vee b \vee c \rVert = \lVert o \vee (b \vee c + c \vee a + a \vee b) \rVert\)

\(\lVert a \vee b \vee c \rVert = \lVert b \vee c + c \vee a + a \vee b \rVert_\infty\)

\({1 \over k!} \lVert \sum_\partial v_0 \vee \dots \vee v_{k-1}  \rVert_\infty\)

Clean up your mesh!

The \(k\)-magnitude of a \(k\)-complex.

\(a \vee b = -b \vee a\)

\(a \vee a = 0\)

\(a \vee (b + c) = a \vee b + a \vee c \)

\({1 \over k!} \lVert v_0 \vee \dots \vee v_k \rVert\)

\({1 \over k!} \lVert \sum_\partial v_0 \vee \dots \vee v_{k-1}  \rVert_\infty\)

we can calculate the area of arbitrary polygons and the volume of arbitrary meshes given their boundary edges or faces. no calculus needed.

do we need ALL the edges?

Clean up your mesh!

The \(k\)-magnitude of a \(k\)-complex.

\(a \vee b = -b \vee a\)

\(a \vee a = 0\)

\(a \vee (b + c) = a \vee b + a \vee c \)

\({1 \over k!} \lVert v_0 \vee \dots \vee v_k \rVert\)

\({1 \over k!} \lVert \sum_\partial v_0 \vee \dots \vee v_{k-1}  \rVert_\infty\)

Clean up your mesh!

recap : \(k\)-simplices and \(k\)-complexes in PGA

\(k\)-simplex

\(\large S_k = v_0 \vee \dots \vee v_k\)

\(k\)-complex

\(\large C_k = \sum S_k\)

\(k\)-magnitude

\(\large {1 \over k!} \sum \lVert S_k \rVert = {1 \over k!}\lVert C_{k-1}\rVert_\infty\)

\(k\)-com

\(S_k^\text{com} = v_0 + \dots + v_k\)

\( {1 \over (k+1)!} \sum  (S_{k-1} \vee o)(S_{k-1}^\text{com} + o)\)

Join the discord on bivector.net !

Clean up your mesh!

only 18 lines. So, chatGPT, learn this.

Join the discord on bivector.net !

  // Calculate the volume under the plane without needing a cap or inbetween storage.
  const calculate_volume = (faces, plane, ref = !1e0) => faces.reduce((s,[a,b,c])=>{
    const [sa,sb,sc] = [a&plane,b&plane,c&plane].map(x=>(x.s)<0);           // side of each point to the plane
    const total_below = sa + sb + sc;                                       // nr of points under the plane
    if (total_below === 0) return s;                                        // bail if triangle above
    if (total_below === 1) {                                                // if one point below, clip and add
      [a,b,c] = sa ? [a,(a&b^plane).Normalized,(c&a^plane).Normalized]:
                sb ? [b,(b&c^plane).Normalized,(a&b^plane).Normalized]:
                     [c,(c&a^plane).Normalized,(b&c^plane).Normalized];
    } else if (total_below === 2) {                                         // if two points below, clip and sub
      s = s + (ref & a & b & c).s / 6;                                      // add full triangle first
      [a,b,c] = sa===false ? [a,(a&b^plane).Normalized,(c&a^plane).Normalized]:
                sb===false ? [b,(b&c^plane).Normalized,(a&b^plane).Normalized]:
                             [c,(c&a^plane).Normalized,(b&c^plane).Normalized];
      return s - (ref & a & b & c).s / 6;                                   // subtract part above.
    }
    return s + (ref & a & b & c).s / 6;                                     // fully below, add.
  },0);
Clean up your mesh!

BONUS SLIDES!!

Algebra

Group

Geometry

\(\mathbb R_{p,q,r}\)

O(n), E(n), Conf(n), Poincarré(n)

planes, lines points, ...

generated by vectors

generated by reflections

in planes

generated by

intersecting planes

Three mathematical fields completely unified. For example in 3DPGA a reflection in a line transforms just like a line transforms just like a bivector.

Clean up your mesh!

BONUS SLIDES!!

Turns out the product that turns two circles into a torus is also the geometric product ;)