Sequoia
Loading...
Searching...
No Matches
Classes | Typedefs
Coordinates

Coordinates are the bridge between the abstract mathematics of spaces and practical application. More...

Classes

struct  sequoia::maths::distinguished_origin
 Type to indicate a distinguished origin, relevant for free modules. More...
 
class  sequoia::maths::coordinates< ConvexSpace, Basis, Origin, Validator >
 Forward declaration for the coordinates class template. More...
 
class  sequoia::maths::coordinates_base< ConvexSpace, Basis, Origin, Validator, DisplacementCoordinates >
 Class designed for inheritance by concerete coordinate types. More...
 

Typedefs

template<affine_space AffineSpace, basis_for< free_module_type_of_t< AffineSpace > > Basis, class Origin >
using sequoia::maths::affine_coordinates = coordinates< AffineSpace, Basis, Origin, std::identity >
 Alias for coordinates of a point in an affine space with respect to a particular origin.
 
template<vector_space VectorSpace, basis_for< free_module_type_of_t< VectorSpace > > Basis>
using sequoia::maths::vector_coordinates = affine_coordinates< VectorSpace, Basis, distinguished_origin >
 Alias for coordinates of an element of a vector space with respect to a particular basis.
 
template<free_module FreeModule, basis_for< free_module_type_of_t< FreeModule > > Basis>
using sequoia::maths::free_module_coordinates = coordinates< FreeModule, Basis, distinguished_origin, std::identity >
 Alias for coordinates of an element of a free module with respect to a particular basis.
 

Detailed Description

Coordinates are the bridge between the abstract mathematics of spaces and practical application.

When dealing with vectors in practice, almost invariably one is using the coordinates of vectors with respect to a particular basis. These are often implicitly conflated with the vector itself. However, the latter are simply elements of a vector space and there is no sense in which different observers can disagree about properties of this fundamental entity. Nevertheless, observers using different bases can absolutely disagree on the coordinates, though once they figure out the relationship between their bases then it becomes possible to translate from one to the other.

It is worth noting that, for a vector space, the kernel of the implementation of the coordinates depends only the field and the dimension. This reflects the fact that vector spaces of the same dimension and over the same field are isomorphic. Similar considerations apply to the various related spaces with which we deal.

A key element of our approach to coordinates is to template on (amongst other things) the underlying space. On the one hand this gives a high degree of type safety; on the other it means that the various different spaces of interest to us can be handled in a uniform manner. For example, affine spaces and vector spaces admit different operations. Knowing the characteristics of the underlying space means that we may statically enable or disable appropriate functionality. For example, coordinates on a vector space may be multiplied by a scalar; not so those on an affine space.

Typedef Documentation

◆ affine_coordinates

template<affine_space AffineSpace, basis_for< free_module_type_of_t< AffineSpace > > Basis, class Origin >
using sequoia::maths::affine_coordinates = typedef coordinates<AffineSpace, Basis, Origin, std::identity>

Alias for coordinates of a point in an affine space with respect to a particular origin.

The basis belongs to the associated vector space, allowing the coordinates type for the affine space to be aware of the type of the coordinate representation for displacements