1: Code example in CGA with Garamon ,
Stephane Breuils and Vincent Nozick // Contact: vincent.nozick@u-pem.fr class Mvec ,
, Compute the outer product between two homogeneous multivectors mv1 (grade 0) and mv2 (grade 0)
, /// \tparam the type of value that we manipulate, either float or double or something
, /// \param mv1 -the first homogeneous multivector of grade 0 represented as an Eigen::VectorXd /// \param mv2 -the second homogeneous multivector of grade 0 represented as a Eigen::VectorXd /// \param mv3 -the result of mv1^mv2, p.0
, template<typename T> void outer_0_0(const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv1, const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv2, Eigen::Matrix<T, Eigen::Dynamic, 1>& mv3){ mv3
, /// \param mv1 -the first homogeneous multivector of grade 0 represented as an Eigen::VectorXd /// \param mv2 -the second homogeneous multivector of grade 1 represented as a Eigen::VectorXd /// \param mv3 -the result of mv1^mv2, p.1
, template<typename T> void outer_0_1(const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv1, const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv2, Eigen::Matrix<T, Eigen::Dynamic, 1>& mv3){ mv3 += mv1
, /// \param mv1 -the first homogeneous multivector of grade 0 represented as an Eigen::VectorXd /// \param mv2 -the second homogeneous multivector of grade 2 represented as a Eigen::VectorXd outer_0_2(const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv1, const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv2
, /// \param mv1 -the first homogeneous multivector of grade 0 represented as an Eigen::VectorXd /// \param mv2 -the second homogeneous multivector of grade 3 represented as a Eigen::VectorXd outer_0_3(const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv1, const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv2
, /// \param mv1 -the first homogeneous multivector of grade 0 represented as an Eigen::VectorXd /// \param mv2 -the second homogeneous multivector of grade 4 represented as a Eigen::VectorXd outer_0_4(const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv1, const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv2
, /// \param mv1 -the first homogeneous multivector of grade 0 represented as an Eigen::VectorXd /// \param mv2 -the second homogeneous multivector of grade 5 represented as a Eigen::VectorXd outer_0_5(const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv1, const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv2
, /// \param mv1 -the first homogeneous multivector of grade 1 represented as an Eigen::VectorXd /// \param mv2 -the second homogeneous multivector of grade 0 represented as a Eigen::VectorXd outer_1_0(const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv1, const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv2
, /// \param mv1 -the first homogeneous multivector of grade 1 represented as an Eigen::VectorXd /// \param mv2 -the second homogeneous multivector of grade 1 represented as a Eigen::VectorXd outer_1_1(const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv1, const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv2, Eigen::Matrix<T, Eigen::Dynamic, 1>& mv3){ mv3
, /// \param mv1 -the first homogeneous multivector of grade 1 represented as an Eigen::VectorXd /// \param mv2 -the second homogeneous multivector of grade 2 represented as a Eigen::VectorXd outer_1_2(const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv1, const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv2, Eigen::Matrix<T, Eigen::Dynamic, 1>& mv3){ mv3.coeffRef(0) += mv1.coeff(0)*mv2
, ) += mv1.coeff(0)*mv2.coeff(6) -mv1.coeff(1)*mv2.coeff(3) + mv1
, ) += mv1.coeff(1)*mv2.coeff(8) -mv1.coeff(2)*mv2.coeff(6) + mv1
, += mv1.coeff(2)*mv2.coeff(9) -mv1.coeff(3)*mv2.coeff(8) + mv1
, /// \param mv1 -the first homogeneous multivector of grade 1 represented as an Eigen::VectorXd /// \param mv2 -the second homogeneous multivector of grade 3 represented as a Eigen::VectorXd outer_1_3(const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv1, const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv2, Eigen::Matrix<T
, coeff(7) -mv1.coeff(1)*mv2.coeff(4) + mv1.coeff(2)*mv2.coeff(2) -mv1, mv3.coeffRef(1) += mv1.coeff(0)*mv2
, ) += mv1.coeff(0)*mv2.coeff(8) -mv1.coeff(1)*mv2.coeff(5) + mv1.coeff(3)*mv2.coeff(2) -mv1
, /// \param mv1 -the first homogeneous multivector of grade 1 represented as an Eigen::VectorXd /// \param mv2 -the second homogeneous multivector of grade 4 represented as a Eigen::VectorXd outer_1_4(const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv1, const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv2, Eigen::Matrix<T, Eigen::Dynamic, 1>& mv3){ mv3
, /// \param mv1 -the first homogeneous multivector of grade 2 represented as an Eigen::VectorXd /// \param mv2 -the second homogeneous multivector of grade 0 represented as a Eigen::VectorXd outer_2_0(const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv1, const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv2
, /// \param mv1 -the first homogeneous multivector of grade 2 represented as an Eigen::VectorXd /// \param mv2 -the second homogeneous multivector of grade 1 represented as a Eigen::VectorXd outer_2_1(const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv1, const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv2, Eigen::Matrix<T, Eigen::Dynamic, 1>& mv3){ mv3.coeffRef(0) += mv1
, /// \param mv1 -the first homogeneous multivector of grade 2 represented as an Eigen::VectorXd /// \param mv2 -the second homogeneous multivector of grade 2 represented as a Eigen::VectorXd outer_2_2(const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv1, const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv2, Eigen::Matrix<T, Eigen::Dynamic, 1>& mv3){ mv3
, coeff(8) -mv1.coeff(1)*mv2.coeff(6) + mv1.coeff(3)*mv2.coeff(4) + mv1, mv3.coeffRef(1) += mv1.coeff(0)*mv2
, )*mv2.coeff(6) + mv1.coeff(3)*mv2.coeff(5) + mv1.coeff(5)*mv2.coeff(3) -mv1.coeff(6)*mv2.coeff(2) + mv1
, coeff(1)*mv2.coeff(9) -mv1.coeff(2)*mv2.coeff(8) + mv1.coeff(3)*mv2.coeff(7) + mv1
, /// \param mv1 -the first homogeneous multivector of grade 2 represented as an Eigen::VectorXd /// \param mv2 -the second homogeneous multivector of grade 3 represented as a Eigen::VectorXd outer_2_3(const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv1, const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv2, Eigen::Matrix<T, Eigen::Dynamic, 1>& mv3){
, coeff(5) -mv1.coeff(5)*mv2.coeff(4) + mv1.coeff(6)*mv2.coeff(3) + mv1.coeff(7)*mv2.coeff(2) -mv1.coeff(8)*mv2, + mv1.coeff(4)*mv2
, /// \param mv1 -the first homogeneous multivector of grade 3 represented as an Eigen::VectorXd /// \param mv2 -the second homogeneous multivector of grade 0 represented as a Eigen::VectorXd outer_3_0(const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv1, const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv2
, /// \param mv1 -the first homogeneous multivector of grade 3 represented as an Eigen::VectorXd /// \param mv2 -the second homogeneous multivector of grade 1 represented as a Eigen::VectorXd outer_3_1(const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv1, const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv2, Eigen::Matrix<T
, Eigen::Matrix<T, Eigen::Dynamic, 1>& mv3){ mv3.coeffRef(0) += mv1.coeff(0)*mv2.coeff(9) -mv1.coeff(1)*mv2.coeff(8) + mv1, /// \param mv1 -the first homogeneous multivector of grade 3 represented as an Eigen::VectorXd /// \param mv2 -the second homogeneous multivector of grade 2 represented as a Eigen::VectorXd outer_3_2(const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv1, const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv2
, /// \param mv1 -the first homogeneous multivector of grade 4 represented as an Eigen::VectorXd /// \param mv2 -the second homogeneous multivector of grade 0 represented as a Eigen::VectorXd outer_4_0(const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv1, const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv2
, /// \param mv1 -the first homogeneous multivector of grade 4 represented as an Eigen::VectorXd /// \param mv2 -the second homogeneous multivector of grade 1 represented as a Eigen::VectorXd outer_4_1(const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv1, const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv2, Eigen::Matrix<T, Eigen::Dynamic, 1>& mv3){ mv3
, /// \param mv1 -the first homogeneous multivector of grade 5 represented as an Eigen::VectorXd /// \param mv2 -the second homogeneous multivector of grade 0 represented as a Eigen::VectorXd outer_5_0(const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv1, const Eigen::Matrix<T, Eigen::Dynamic, 1>& mv2
, Dynamic,1> &, const Eigen::Matrix<T, Eigen::Dynamic,1>&, Eigen::Matrix<T,Eigen::Dynamic,1>&)>,6>,6> outerFunctionsContainer={{ {{outer_0_0<T>
On Parallelizing the Clifford Algebra Product for CLIFFORD, Advances in Applied Clifford Algebras, vol.24, pp.1661-4909, 2014. ,
Using periodicity theorems for computations in higher dimensional Clifford algebras, Advances in Applied Clifford Algebras, vol.24, pp.569-587, 2014. ,
Massive Geometric Algebra: Visions for C++ implementations of geometric algebra to scale into the big data era, Advances in Applied Clifford Algebras, vol.27, pp.2153-2174, 2017. ,
Differential Methods for Multidimensional Visual Data Analysis, Handbook of Mathematical Methods in Imaging, pp.1-56, 2014. ,
A Geometric Algebra Implementation using Binary Tree, Advances in Applied Clifford Algebras, vol.27, pp.1661-4909, 2017. ,
URL : https://hal.archives-ouvertes.fr/hal-01510078
A Hybrid Approach for Computing Products of High-dimensional Geometric Algebras, Proceedings of the Computer Graphics International Conference, EN-GAGE. CGI '17. Hiyoshi, vol.43, 2017. ,
URL : https://hal.archives-ouvertes.fr/hal-01552462
Quadric Conformal Geometric Algebra of R 9, Advances in Applied Clifford Algebras, vol.6, pp.1661-4909, 2018. ,
URL : https://hal.archives-ouvertes.fr/hal-01767230
, , pp.2017-2021
Optimal learning rates for Clifford neurons, International conference on artificial neural networks, pp.864-873, 2007. ,
DOI : 10.1007/978-3-540-74690-4_88
Simplification and streaming of GIS terrain for web clients, Proceedings of the 17th International Conference on 3D Web Technology, pp.73-81, 2012. ,
DOI : 10.1145/2338714.2338726
URL : https://hal.archives-ouvertes.fr/hal-01353037
The vector algebra war: a historical perspective, IEEE Access, vol.4, pp.1997-2004, 2016. ,
Geometric algebra enhanced precompiler for C++, OpenCL and Mathematica's OpenCLLink, Advances in Applied Clifford Algebras, vol.24, pp.613-630, 2014. ,
DOI : 10.1007/s00006-014-0443-7
Applications of Grassmann's Extensive Algebra, American Journal of Mathematics, vol.1, p.29327, 1878. ,
DOI : 10.2307/2369379
Spatial computing with conformal geometric algebra, 2011. ,
A history of vector analysis: The evolution of the idea of a vectorial system, Courier Corporation, 1994. ,
File Searching Using Variable Length Keys, Western Joint Computer Conference. IRE-AIEE-ACM '59, pp.295-298, 1959. ,
Cache-oblivious algorithms and data structures, Lecture Notes from the EEF Summer School on Massive Data Sets, vol.8, pp.1-249, 2002. ,
The quantum theory of the electron, Proc. R. Soc. Lond. A, vol.117, pp.610-624, 1928. ,
Geometric Algebra for Physicists, 2003. ,
DOI : 10.1017/cbo9780511807497
Lie groups as spin groups, Journal of Mathematical Physics, vol.34, pp.3642-3669, 1993. ,
DOI : 10.1063/1.530050
3D Oriented Projective Geometry Through Versors of R 3,3, Advances in Applied Clifford Algebras, vol.26, pp.1137-1172, 2016. ,
The inner products of geometric algebra, Applications of Geometric Algebra in Computer Science and Engineering, pp.35-46, 2002. ,
Geometric Algebra for Computer Science, An Object-Oriented Approach to Geometry, 2007. ,
DOI : 10.1145/1466390.1466396
An analytical theory of mathematical morphology, Mathematical Morphology and its Applications to Signal Processing, pp.245-250, 1993. ,
The Non-Degenerate Dupin Cyclides in the Space of Spheres Using Geometric Algebra, Advances in Applied Clifford Algebras, vol.24, pp.1661-4909, 2014. ,
URL : https://hal.archives-ouvertes.fr/hal-01288698
Modeling 3D Geometry in the Clifford Algebra R 4,4, Advances in Applied Clifford Algebras, vol.27, pp.1661-4909, 2017. ,
Double conformal geometric algebra, Advances in Applied Clifford Algebras, vol.27, pp.2175-2199, 2017. ,
DOI : 10.1007/s00006-017-0784-0
Triple conformal geometric algebra for cubic plane curves, Mathematical Methods in the Applied Sciences, pp.1099-1476, 2017. ,
Population count in arrays, p.95, 2009. ,
Optimized Automatic Code Generation for Geometric Algebra Based Algorithms with Ray Tracing Application, 2016. ,
An Extended Implementation Framework for Geometric Algebra Operations on Systems of Coordinate Frames of Arbitrary Signature, Advances in Applied Clifford Algebras, vol.28, pp.1661-4909, 2018. ,
Efficient Implementation of Geometric Algebra, 2007. ,
Gaigen 2:: a geometric algebra implementation generator, Proceedings of the 5th international conference on Generative programming and component engineering, pp.141-150, 2006. ,
Gaigen 2.5 User Manual ,
DOI : 10.1145/1173706.1173728
GAviewer, interactive visualization software for geometric algebra, 2010. ,
Implementing geometric algebra products with binary trees, Advances in Applied Clifford Algebras, vol.24, pp.589-611, 2014. ,
DOI : 10.1007/s00006-014-0447-3
URL : https://hal.archives-ouvertes.fr/hal-01095495
An introduction to ray tracing, 1989. ,
R(4, 4) As a Computational Framework for 3-Dimensional Computer Graphics, Advances in Applied Clifford Algebras, vol.25, pp.1661-4909, 2015. ,
DOI : 10.1007/s00006-014-0480-2
Die lineale Ausdehungslehre: ein neuer Zweig der Mathematik, dargestellt und durch Anwendungen auf die übrigen Zweige der Mathematik, wie auch die Statik, Mechanik, die Lehre von Magnetismus und der Krystallonomie erläutert, 1844. ,
DOI : 10.1017/cbo9781139237352
The elastic theory of shells using geometric algebra, Royal Society open science, vol.4, p.170065, 2017. ,
Eigen v3, 2010. ,
On quaternions; or on a new system of imaginaries in algebra, The London, vol.33, pp.58-60, 1848. ,
Grassmann's vision, Visionary Mathematician, pp.243-254, 1996. ,
New foundations for classical mechanics, vol.15, 2012. ,
DOI : 10.1119/1.16386
Oersted Medal Lecture 2002: Reforming the mathematical language of physics, 2003. ,
DOI : 10.1119/1.1522700
, Space-time algebra, vol.1, 1966.
The zitterbewegung interpretation of quantum mechanics, Foundations of Physics, vol.20, pp.1572-9516, 1990. ,
Clifford algebra to geometric calculus: a unified language for mathematics and physics, vol.5, 2012. ,
Foundations of Geometric Algebra Computing, 2013. ,
Analyzing the inner product of 2 circles with Gaalop, Mathematical Methods in the Applied Sciences, vol.41, issue.11, pp.4049-4062, 2018. ,
Geometric Algebra and its Application to Computer Graphics, Eurographics 2004 -Tutorials. Eurographics Association, 2004. ,
Geometric operations implemented by conformal geometric algebra neural nodes, 2013. ,
Relativistic physics as application of geometric algebra, Proceedings of the International Conference on Relativity, pp.71-90, 2005. ,
Carrier Method for the General Evaluation and Control of Pose, Molecular Conformation, Tracking, and the Like, Advances in Applied Clifford Algebras, vol.19, pp.339-364, 2009. ,
Understanding Geometric Algebra: Hamilton, Grassmann, and Clifford for Computer Vision and Graphics, p.9781482259506, 2015. ,
A Clifford algebraic approach to line geometry, Advances in Applied Clifford Algebras, vol.24, pp.713-736, 2014. ,
A Covariant Approach to Geometry and its Applications in Computer Graphics, 2002. ,
Using geometric algebra for optical motion capture, Geometric Algebra with Applications in Science and Engineering, pp.147-169, 2001. ,
A generalized FFT for Clifford algebras, Bulletin of Belgian Mathematical Society, vol.11, pp.663-688, 2004. ,
GluCat: Generic library of universal Clifford algebra templates ,
Roulette-wheel selection via stochastic acceptance, Physica A: Statistical Mechanics and its Applications, vol.391, pp.2193-2196, 2012. ,
Global stability of Clifford-valued recurrent neural networks with time delays, Nonlinear Dynamics, vol.84, pp.767-777, 2016. ,
A Hierarchical Representation and Computation Scheme of Arbitrary-dimensional Geometrical Primitives Based on CGA, Advances in Applied Clifford Algebras, vol.27, pp.1977-1995, 2017. ,
The making of a geometric algebra package in Matlab, 1999. ,
Computer theorem proving for verifiable solving of geometric construction problems, International Workshop on Automated Deduction in Geometry, pp.72-93, 2014. ,
, , vol.1, p.1881
Die Grundgleichungen für die elektromagnetischen Vorgänge in bewegten Körpern, Mathematische Annalen, vol.68, pp.472-525, 1910. ,
Geometric preservation of 2D digital objects under rigid motions, Journal of Mathematical Imaging and Vision, 2018. ,
URL : https://hal.archives-ouvertes.fr/hal-01695370
Real-time rendering under distant illumination with conformal geometric algebra, Mathematical Methods in the Applied Sciences, 2017. ,
A model for quadric surfaces using geometric algebra, Unpublished, October, 2012. ,
, , pp.2017-2021
, CLUCal/CLUViz Interactive Visualization
Geometric algebra with applications in engineering, vol.4, pp.9783540890676-354089067, 2009. ,
Clifford Algebra Implementation in Maxima, Alterman Conference on Geometric Algebra and Summer School on Kahler Calculus, 2016. ,
GPU collision detection in conformal geometric space, V Ibero-American symposium in computer graphics SIACG, pp.153-157, 2011. ,
Clifford Multivector Toolbox (for MATLAB), Advances in Applied Clifford Algebras, vol.27, pp.1661-4909, 2017. ,
On properties of analytical approximation for discretizing 2D curves and 3D surfaces, Mathematical Morphology-Theory and Applications, vol.2, pp.25-34, 2017. ,
Gaalet-a C++ expression template library for implementing geometric algebra, 6th High-End Visualization Workshop, 2010. ,
Anyons in three dimensions with geometric algebra, 2016. ,
Geometric computing with Clifford algebras: theoretical foundations and applications in computer vision and robotics, 2013. ,
Geometric algebra primer, Self-published on personal website, 2003. ,
Extending CSG with projections: Towards formally certified geometric modeling, Computer-Aided Design, vol.66, pp.45-54, 2015. ,
URL : https://hal.archives-ouvertes.fr/hal-01205752
Geometric algebra for computer graphics, 2008. ,
Clifford algebra method for network expression, computation, and algorithm construction, Mathematical Methods in the Applied Sciences, vol.37, pp.1428-1435, 2014. ,
Geometric Algebra; Description and Implementation, Advances in Applied Clifford Algebras, vol.6, pp.1661-4909, 2014. ,
MVTree for Hierarchical Network Representation Based on Geometric Algebra Subspace, Advances in Applied Clifford Algebras, vol.28, p.39, 2018. ,
DOI : 10.1007/s00006-018-0855-x