The Vish Visualization Shell 0.3
Vish
Eagle::PhysicalSpace Namespace Reference

Geometric algebra of the physical 3D-space, by which we mean the Clifford algebara over Euclidean, three-dimensional space. More...

Classes

struct  AABB
 Simplistic class for Axis-Aligned Bounding Box. More...
struct  AABB_2D
 Axis-aligned bounding box in 2D dimensions out of 3D, allowing for projections other than XY. More...
struct  AnalyticFunction
 Abstract base class for analytical functions that are evaluated on a physical space. More...
class  bivector
 A three-dimensional Bi-Vector which is span by two vectors to define a plane. More...
struct  Frustum
 A frustum and operations on it, as described by either a set of corner points or six planes. More...
struct  HessianNormalPlane
class  MultiVector
 A full multivector in 3D consists of $2^3$ components. More...
class  OddMultiVector
 The combination of a vector and a trivector yields an odd multivector, which is dual to a rotor. More...
struct  Plane
 Normal form of a plane. More...
class  point
 A point in physical 3D space. More...
class  rotor
 A rotor is the sum of scalar with a bivector. More...
struct  Span
struct  Span< 1 >
 A one-dimensional span, also a known as a Ray. More...
struct  Span< 2 >
 A two-dimensional span, also a known as the parametric form of a plane. More...
struct  Span< 3 >
class  trivector
 A Tri-Vector, or oriented volume in 3D space. More...
class  vector
 3-dimensional vector. More...
struct  Viewport
 A helper class describing an axis-aligned rectangle. More...

Typedefs

typedef rotor EvenMultiVector
 A rotor is an even multivector.

Functions

double computeIntersectionDistance (const Plane &P, const Ray &R)
 Compute the intersection parameter $\lambda$ for a Ray hitting a Plane.
vector dot (const bivector &a, const vector &b)
 Inner (dot) product of a bivector and a vector.
vector dot (const trivector &a, const bivector &b)
 xyz ( xy + yz + zx ) = xyz xy + xyz yz + xyz zx = -xzy xy - xyz zy - yxz zx = zxy xy = -zyx xy - xyz zy - yxz zx z x y
vector dot (const vector &a, const bivector &b)
 Inner (dot) product of a vector and bivector.
double dot (const vector &a, const vector &b)
 Euclidan Inner (dot) product of two vectors.
Metric dyadic (const vector &a, const vector &b)
 Tensor product or dyadic product of two vectors.
rotor exp (const bivector &i)
 Compute the exponential of a bivector, which implements a rotation as given by the norm of the bivector.
rotor exp (const bivector &U, double phi)
 Implement a rotation of phi degrees along the bivector U.
rotor exp (const rotor &s)
 Compute the exponential of a rotor (by Andrew Hamilton).
void glTranslate (const Eagle::PhysicalSpace::point &origin)
 Perform an OpenGL glTranslate() call on a point given in physical space.
void glVertex (const Eagle::PhysicalSpace::point &P)
 Perform an OpenGL glVertex() call on a point given in physical space.
rotor ln (const rotor &s)
 Compute the natural logarithm of a rotor (by Andrew Hamilton).
Ray makeRay (const point &A, const point &B)
 Make a ray from two points, starting from the first one.
vector operator% (const vector &l, const vector &r)
 Compute the three-dimensional cross product.
bivector operator() (const bivector &V) const
 Rotate a bivector.
OddMultiVector operator* (const bivector &a, const vector &b)
 Geometric product of bivector and vector yields an odd multivector, the sum of a vector and trivector.
OddMultiVector operator* (const rotor &R, const vector &v)
rotor operator* (const vector &l, const vector &r)
 The multiplication operation on two vectors implements the geometric product $ lr := l.r + l^r $, thus generating a clifford algebra.
rotor operator+ (const bivector &U, double r)
 Create a rotor as sum of bi-vector and scalar.
rotor operator+ (const rotor &U, double r)
 Add a scalar value to a rotor.
rotor operator+ (double r, const bivector &U)
 Create a rotor as sum of scalar and bi-vector.
rotor operator+ (double r, const rotor &U)
 Add a scalar value to a rotor.
point operator- (const point &P, const vector &v)
rotor operator- (const rotor &U, double r)
 Add a scalar value to a rotor.
rotor operator- (double r, const bivector &U)
 Create a rotor as difference of scalar and bi-vector.
rotor operator- (double r, const rotor &U)
 Add a scalar value to a rotor.
rotor operator/ (const rotor &l, const rotor &r)
 Note that $ l/r := l*r^{-1} \neq r^{-1} * l $.
rotor operator/ (const vector &l, const vector &r)
 Divide two vectors, yielding the rotation operation to sweep the second vector to the first one.
trivector operator^ (const bivector &a, const vector &b)
 Compute outer product of bivector and vector.
trivector operator^ (const vector &a, const bivector &b)
 Compute outer product of vector and bivector.
bivector operator^ (const vector &a, const vector &b)
 Wedge product of two vectors yields a bivector.
rotor operator~ (const rotor &r)
 Compute the inverse rotor.
rotor pow (const rotor &r, double t)
 Compute the power of a rotor.
Matrix< 4, 4, double > rotmatrix (const rotor &r)
 Compute the classical 4x4 rotation Matrix.
rotor slerp (const rotor &r1, const rotor &r2, double t)
 Interpolate between q1 (t = 0) and q2 (t = 1): q = (q2/q1)^t q1 .

Detailed Description

Geometric algebra of the physical 3D-space, by which we mean the Clifford algebara over Euclidean, three-dimensional space.

It can reflect the properties of a flat, 3-dimensional manifold or the tangential space of a curved, 3-dimensional manifold.

Note
The classes in PhysicalSpace are currently implemented to operate on the double type. It were easy to change this to a generic template instead, in case the need arises. For now, this appears to be an overhead to always write <> in an instance, even though a typedef could fix that easily as well. If there is a real need to instantiate geometric algebra over other types than doubles, we can do it then.

Typedef Documentation

◆ EvenMultiVector

A rotor is an even multivector.

A rotor is an even MultiVector.

Function Documentation

◆ computeIntersectionDistance()

double Eagle::PhysicalSpace::computeIntersectionDistance ( const Plane & P,
const Ray & R )
inline

Compute the intersection parameter $\lambda$ for a Ray hitting a Plane.

The actual intersection point can be computed as R( $\lambda$) .

References dot().

◆ dot() [1/2]

vector Eagle::PhysicalSpace::dot ( const bivector & a,
const vector & b )
inline

Inner (dot) product of a bivector and a vector.

(A xy + B yz + C zx)|(ax+ by+ cz) = ( -Aa y + Ca z + Ab x - Bb z + Bc y - Cc x) = (Ab-Cc) x + (Bc - Aa) y + ( Ca - Bb) z

◆ dot() [2/2]

double Eagle::PhysicalSpace::dot ( const vector & a,
const vector & b )
inline

Euclidan Inner (dot) product of two vectors.

Compute the Euclidean dot product (inner product) of two vectors.

Referenced by computeIntersectionDistance(), Eagle::PhysicalSpace::rotor::operator()(), operator*(), and Eagle::PhysicalSpace::rotor::operator*().

◆ dyadic()

Metric Eagle::PhysicalSpace::dyadic ( const vector & a,
const vector & b )
inline

Tensor product or dyadic product of two vectors.

Creates a tensor of order two.

◆ operator*() [1/3]

OddMultiVector Eagle::PhysicalSpace::operator* ( const bivector & a,
const vector & b )
inline

Geometric product of bivector and vector yields an odd multivector, the sum of a vector and trivector.

An odd multivector is dual to a rotor, an even multivector.

References dot().

◆ operator*() [2/3]

OddMultiVector Eagle::PhysicalSpace::operator* ( const rotor & R,
const vector & v )
inline

Use its vec() member function to retrieve the vectorial part.

◆ operator-()

point Eagle::PhysicalSpace::operator- ( const point & P,
const vector & v )
inline
Todo
Use computational constructor for '-'