Extensibilidad


    Es muy probable que en algún momento sea necesario definir un nuevo tipo de coordenada, ya sea para una nueva dimensión ( bicotiCoordinate4D por ejemplo )  o un nuevo tipo de coordenadas ( polares por ejemplo ). Para hacerlo manteniendo el " espíritu de BiCoTI " es necesario seguir algunas reglas , las que aclararemos a continución.

1 ) La clase base de todas las coordenadas es bicotiCoordinate, con lo que una nueva clase de
     coordenada deberá ser una especialización de ella o de alguna de sus hijas.
     Por ejemplo, si se desea agregar una especialización 4D, es bastante claro que el arbol de herencia
     debería quedar como se indica en la figura 1.2.


figura 1.2

2 ) El tipo de las componentes siempre debe ser el template CoordComponentType, es decir que hay que
     dejar la flexibilidad de parametrizar el tipo de las componentes. Sin embargo pueden agregarse
     nuevos templates, como se hace en bicotiCoordinateVectorialStatic ( se agrega el template dim ).

3 ) Las coordenadas deben tener un conjunto de funciones y operadores definidos para ser una
     coordenada. Lo que las une es esta interfáz común.
     Por lo tanto, si quiero agragar una especialización bicotiCoordinateND por ejemplo, debo definir :


class bicotiCoordinateND< class CoordComponentType >



Funciones de la clase

bicotiCoordinateND ( )
                Constructor por defecto, sin parámetros.
bicotiCoordinateND ( const  bicotiCoordinateND<CoordComponentType> &  )
                Constructor de copia.
CoordComponentType& operator ( ) ( int  )
                Acceso estandar a las componentes.
unsigned GetDimension ( )
                   Devuelve la dimensión.

void operator =const bicotiCoordinateND <CoordComponentType> &  )
                   Operador de asignación.
bool operator ==const bicotiCoordinateND<CoordComponentType>&  )
                   Operador booleano de igualdad.

bicotiCoordinateND<CoordComponentType>operator + double  )
void operator +=double  )
                   Suma con un doble.
bicotiCoordinateND<CoordComponentType>operator -double  )
void operator -=double  )
                     Resta con un doble.
bicotiCoordinateND<CoordComponentType>operator *double  )
void operator *=double  )
                   Producto por un doble.
bicotiCoordinateND<CoordComponentType>operator /double  )
void operator /=double  )
                   División por un doble.

bicotiCoordinateND<CoordComponentType>operator + (const bicotiCoordinateND<CoordComponentType>&)
void operator += ( const bicotiCoordinateND<CoordComponentType> & )
                   Suma.
bicotiCoordinateND<CoordComponentType>operator - (const bicotiCoordinateND<CoordComponentType>& )
void operator -= ( const bicotiCoordinateND<CoordComponentType> & )
                   Resta.
bicotiCoordinateND<CoordComponentType>operator * (const bicotiCoordinateND<CoordComponentType>&)
void operator *= ( const bicotiCoordinateND<CoordComponentType> & )
                   Producto.
bicotiCoordinateND<CoordComponentType>operator / (const bicotiCoordinateND<CoordComponentType>&)
void operator /= ( const bicotiCoordinateND<CoordComponentType> & )
                   División.

REAL ScalarProduct ( const bicotiCoordinateND<CoordComponentType> & )
                  Producto escalar.
REAL Norm ( )
                  Norma.
bicotiCoordinateND<CoordComponentType>operator ^ ( int  )
                  Potencia.

operator bicotiCoordinateND< INTEGER > ( )
                  Casting de las componentes a entero.
operator bicotiCoordinateND< REAL > ( )
                  Casting de las componentes a real.