namespace Msp {
namespace Geometry {
+/**
+The three-dimensional special case of a HyperBox. This class exists for
+convenience only and does not provide any extra functionality over the base
+class.
+*/
template<typename T>
class Box: public HyperBox<T, 3>
{
namespace Msp {
namespace Geometry {
+/**
+The two-dimensional special case of a HyperSphere. This class exists for
+convenience only and does not provide any extra functionality over the base
+class.
+*/
template<typename T>
class Circle: public HyperSphere<T, 2>
{
namespace Msp {
namespace Geometry {
+/**
+A shape bounded by planar faces at right angles to each other. Two- and three-
+dimensional cases are Rectangle and Box, respectively.
+*/
template<typename T, unsigned D>
class HyperBox: public Shape<T, D>
{
namespace Msp {
namespace Geometry {
+/**
+A shape consisting of the points within a specific distance from the origin.
+Two- and three-dimensional cases are Circle and Sphere, respectively.
+*/
template<typename T, unsigned D>
class HyperSphere: public Shape<T, D>
{
namespace Msp {
namespace Geometry {
+/**
+The two-dimensional special case of a HyperBox. This class exists for
+convenience only and does not provide any extra functionality over the base
+class.
+*/
template<typename T>
class Rectangle: public HyperBox<T, 2>
{
template<typename T, unsigned D>
class SurfacePoint;
+/**
+Base class and interface for geometric shapes. Shapes may be bounded or
+unbounded. They are always considered to be solid, i.e. have a distinct inside
+and an outside.
+*/
template<typename T, unsigned D>
class Shape
{
namespace Msp {
namespace Geometry {
+/**
+A point on the surface of a shape.
+*/
template<typename T, unsigned N>
struct SurfacePoint
{
namespace Msp {
namespace Geometry {
+/**
+A shape modified by an affine transformation.
+*/
template<typename T, unsigned D>
class TransformedShape: public Shape<T, D>
{
namespace LinAl {
/**
-A general mathematical matrix.
+A general mathematical matrix with M rows and N columns.
*/
template<typename T, unsigned M, unsigned N>
class Matrix
virtual ~not_invertible() throw() { }
};
+/**
+A mathematical matrix with S rows and columns. Some operations are provided
+here that are only possible for square matrices.
+*/
template<typename T, unsigned S>
class SquareMatrix: public Matrix<T, S, S>
{