/** @defgroup geomset Geomset
 *
 * Classes in this module represent geometry of the set.  They are basis for 'dynset' classes.
 * Read detailed description of \ref geomset_module for more details.
 *
 */

/** @page geomset_module GeomSet

Classes in capd/geomset directory represent geometry of the set.  They are basis for 'dynset' classes.

On the one hand a naive set representation (as a product of intervals) yields to big overestimations, on the other hand representations with polynomials of high degree are very accurate but when propagated they need a lot of computations.

\section geomset_representation Internal represenation

We use the following representations:
AffineSet and CenteredAffineSet have the form
\f[
x+B\cdot r
\f]
where x,r are interval vectors and B is a matrix. In general x is fought as set center, B is a coordinate system and r stores set size. CenteredAffineSet in addition in constructors checks if r contains 0 and corrects set representation if needed.

DoubletonSet and CenteredDoubletonSet have the form
\f[
x+C\cdot r0+B \cdot r
\f]
where x, r, r0 are interval vectors, B, C are interval matrices. Again x is  a set center, B and C are coordinate systems for r and r0 part correspondingly. Then r0 stores an initial set size and r is a container for all computational errors. CenteredDoubletonSet in addition in constructors checks if r and r0 contain 0 and corrects set representation if needed.

\section geomset_constructors Constructors

You can fully specify set giving all details:
\code
AffineSet(x, B , r);
DoubletonSet(x, C, r0, B, r);
\endcode

If you do not provide some data than by default vectors will be set to 0 and matrices to identity.  Possible combinations are:
- AffineSet and CenteredAffineSet
  - dimension
  - v
  - x, r
  - x, B, r
- DoubletonSet and CenteredDoubletonSet
  - dimension
  - v
  - x, r0
  - x, C, r0
  - x, C, r0, r
  - x, C,r0, B, r

\section geomset_accessors Accessors

You can not access any field in a class directly, instead you can use get/set functions.
For a member m (one of x, r, r0, B, C) there are functions
\code
get_m();
set_m(newValue);
\endcode
which return or change given field.

If m is a vector then we also define:
\code
getElement_m(i);                //  returns i-th coordinate of the vector m
setElement_m(i, newValue);      //  sets i-th coordinate of the vector m to newValue
\endcode
which get/sets i-th coordinate of a given vector m (<i>i=0,1,...,dimension-1</i>).
<b>Coordinates are numbered starting with 0!</b>

If m is a matrix then we define:
\code
getElement_m (int i, int j)      // returns m[i][j]
getRow_m (int i)                 // returns i-th row of m
getColumn_m (int j)              // returns j-th column of m
setElement_m (i, j, s)           // sets m[i][j] = s
setRow_m (i, v)                  // sets i-th row of m to v
setColumn_m (j, v)               // sets j-th column of f to v
\endcode
where i=0,1,...,numberOfRows-1 and j=0,1,...,numberOfColumns-1.
*/
