Steven De Keninck PRO
Mathematical Experimentalist
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 ;)
By Steven De Keninck
Clean up your Mesh! PGA as a representational tool for k-simplices and k-complexes.