# geometric algebra a collection of links and notes. soon to be updated as i progress with the software implementation [sph-ga](https://github.com/sph-mn/sph-ga). # links ## 1 * youtube: [from zero to geo](https://www.youtube.com/watch?v=2hBWCCAiCzQ&list=PLVuwZXwFua-0Ks3rRS4tIkswgUmDLqqRy&pp=iAQB) * [dorst, fontijne, mann - geometric algebra for computer science](http://www.geometricalgebra.net/) explanations and consideration for software * [versor.js](https://github.com/weshoke/versor.js), javascript port of libvsr * [wikipedia: conformal geometric algebra](https://en.wikipedia.org/wiki/Conformal_geometric_algebra) * [wikipedia: geometric algebra](https://en.wikipedia.org/wiki/Geometric_algebra) ## 2 * youtube * [geometric algebra](https://www.youtube.com/playlist?list=PLpzmRsG7u_gqaTo_vEseQ7U8KFvtiJY4K) video series by mathoma * [wild linear algebra](https://www.youtube.com/watch?v=yAb12PWrhV0&list=PLIljB45xT85BhzJ-oWNug1YtUjfWp1qAp) youtube video series by n j wildberger about linear algebra, which includes some of the fundamental knowledge for understanding geometric algebra * [gaviewer](http://www.geometricalgebra.net/gaviewer_download.html) for visualizations * [gaviewer tutorial](https://geometricalgebra.org/downloads/gaviewerexercises.pdf) * [bleyer.org list of resources](http://bleyer.org/dw/doku.php?id=geometric_algebra) * [clifford algebra: a visual introduction](https://slehar.wordpress.com/2014/03/18/clifford-algebra-a-visual-introduction) * [clifford/geometric algebra on euclideanspace.com](http://www.euclideanspace.com/maths/algebra/clifford/index.htm) introduction to elements and operations * [colapinto - articulating space](http://versor.mat.ucsb.edu/ArticulatingSpace.pdf) dissertation. particularly for context * [ga-explorer list of resources](https://ga-explorer.netlify.com/index.php/ga-online-resources) * [lecture slides by dr chris doran](http://geometry.mrao.cam.ac.uk/2016/10/geometric-algebra-2016) website went down while posting this link * [libvsr](https://github.com/wolftype/versor) c++ template based implementation, which means algebras for different metrics are pre-compiled and fast but perhaps can not easily be run-time created. some additional usage information may be found in the text "articulating space" * [pablo colapintos talk from c++ now 2014](https://youtu.be/W4p-e-g37tg) * [reference implementation](http://www.geometricalgebra.net/reference_impl.html) from the book "geometric algebra for computer science" * [suter - geometric algebra primer](http://www.jaapsuter.com/geometric-algebra) introduction to the elements and operations. mentions some important details that are often assumed # main structures * scalars: representing real numbers * vectors: elements of a vector space * bivectors: oriented plane segments formed by the wedge product of two vectors * trivectors: oriented volume segments formed by the wedge product of three vectors * multivectors: general elements comprising sums of scalars, vectors, bivectors, and higher-grade elements * blades: simple multivectors obtained from the wedge product of linearly independent vectors * pseudoscalars: highest-grade elements in a given dimension, analogous to oriented volumes * spinors: elements that represent rotations and reflections # main operations * geometric product: the fundamental operation combining the dot product and wedge product, encompassing both magnitude and orientation. this is how elements are multiplied * inner product (dot product): measures the scalar projection of one vector onto another * exterior product (wedge product, outer product): produces higher-grade elements, encoding the oriented area, volume, etc * conjugation: the operation of reversing the order of vectors in the product * reversion: taking the reverse of a multivector by reversing the order of all geometric products within it * grade projection: decomposing a multivector into its constituent grades * clifford conjugation: the combination of reversion and sign change for each vector * norm: measuring the magnitude of a multivector * dualization: mapping between multivectors and their dual counterparts via the pseudoscalar # conformal geometric algebra in conformal geometric algebra (cga), a point in euclidean space is represented as a null vector in a higher-dimensional space. specifically, for an n-dimensional euclidean space, cga embeds this space into an (n + 2)-dimensional space with a signature (n + 1, 1). the point p with coordinates (x1, x2, ..., xn) is represented as: ~~~ p = x1 * e1 + x2 * e2 + ... + xn * en + e0 + 0.5 * (x1 ** 2 + x2 ** 2 + ... + xn ** 2) * e∞ ~~~ where 'e1, e2, ..., en' are the basis vectors corresponding to the original euclidean space. e0 and e∞ are additional basis vectors with specific properties to facilitate the embedding, introduced to handle infinity and origin, and operations like translation, rotation, dilation, and reflection. e0 is often associated with the origin in the extended space. e∞ represents the "point at infinity," enabling the conformal model to handle infinite points, essential for representing directions and ideal points. the null vector condition is given by: ~~~ dot_product(p, p) = 0 ~~~ this condition ensures that the representation is a null vector in the conformal space, preserving the geometric properties of the original euclidean point. ## rotation ~~~ rotor = e ** (-axis_orthogonal_plane * angle / 2) ~~~ where axis_orthogonal_plane is a unit bivector. without exponentiation, the rotor can be constructed using the trigonometric functions that define the exponential form. ~~~ rotor = cos(angle / 2) + bivector * sin(angle / 2) ~~~ ## translation ~~~ rotor = 1 + 1 / 2 * translation_vector * e∞ ~~~ ## rotation followed by translation ~~~ rotor = e ** (-axis * angle / 2) * (1 + 1 / 2 * translation_vector * e∞) ~~~ ## perspective projection described in [computing perspective projections in 3-dimensions using rotors in the homogeneous and conformal models of clifford algebra](https://www.researchgate.net/publication/266979004_Computing_Perspective_Projections_in_3-Dimensions_Using_Rotors_in_the_Homogeneous_and_Conformal_Models_of_Clifford_Algebra). step 1: reflection ~~~ e ** ((angle / 2) * n * e4) = cos(angle / 2) + sin(angle / 2) * n * e4 ~~~ step 2: inversion ~~~ e ** ((1 / (2 * d)) * n * e0) = exterior_product(1 + (1 / (2 * d) * n, e0)) ~~~ # rotor application ~~~ result = rotor * point * reverse(rotor) ~~~