bicotiGeometricalFacade3D


     Fachada de los objetos Geometrical, comenzaremos dando una descripción de las funciones y luego haremos ejemplos de su uso.





bicotiGeometricalFacade
bicotiGeometricalFacade2D
bicotiGeometricalFacade3D


class bicotiGeometricalFacade3D< class PixelType, class PrecisionType >



Comentarios Generales:

       Los argumentos template: PixelType y PrecisionType, corresponden al tipo de pixel a utilizar y a el tipo de precisión deseada, intervienen en los algoritmos ya que hay que interpolar imagenes. Para conocer mas sobre PixelType y PrecisionType ir a Pixels.

Las funciones protegidas solamente están para fraccionar problemas complejos en mas sencillos, no hace falta comprenderlas para usar la funcionalidad prevista desde las funciones públicas.


Protected Methods

bool PointsInSameFace( bicotiCoordinate3D< REAL > &, bicotiCoordinate3D< REAL >& )
bool PlaneForEdge( bicotiCoordinate3D< REAL >, bicotiCoordinate3D< REAL > )
bool InImage( bicotiCoordinate3D< REAL > &)
bool ParallelPrincipalsPlanes( bicotiCoordinate3D< REAL >& , bicotiCoordinate3D< REAL >& ,
                                                          bicotiCoordinate3D< REAL >& )
bool EqualPoint( bicotiCoordinate3D< REAL >& , bicotiCoordinate3D< REAL >& )
  vector< bicotiCoordinate3D< REAL > > ComputePlaneEdgeCut( bicotiCoordinate3D< REAL >,
                                                                                                                      bicotiCoordinate3D< REAL > )

Public Methods

bicotiGeometricalFacade3D( bicotiImageImplementatio3D< PixelType > *)
~bicotiGeometricalFacade3D( )

void BuildAffimTransformation( )
void BuildRotation( double )
void BuildCutter( bicotiCoordinate3D< REAL >, bicotiCoordinate3D< REAL >, bicotiCoordinate3D< REAL >,
                                     bicotiImageImplementation2D< PixelType >* )

void ApplyAffimTransformation( )

void UsePixelInterpolatorLinear( )
void UsePixelInterpolatorLagrange( )

bicotiCoordinate3D< REAL > GetOriginSubspace( )
bicotiCoordinate3D< REAL > GetVectorISubspace( )
bicotiCoordinate3D< REAL > GetVectorJSubspace( )

bicotiCoordinate3D< REAL >& RotationAxis( )



bool PointsInSameFace( bicotiCoordinate3D< REAL > &, bicotiCoordinate3D< REAL >& )

         Función protegida de la clase, cuando se usan cortes de 3D a 2D, se encarga de averiguar del
         resultado de ComputePlaneEdgeCut( ), que puntos están sobre una misma cara "externa".



bool PlaneForEdge( bicotiCoordinate3D< REAL >, bicotiCoordinate3D< REAL > )

         Función protegida de la clase, cuando se usan cortes de 3D a 2D, se encarga de averiguar si el
         plano de corte contiene alguna de las "aristas" de la imagen ( pensar en un prisma ). Si es así
         resuelve el problema del corte. Los parámetros que recibe son el vector de coeficientes y el vector
         del plano de corte( vector perpendicular al plano ).

          Plano definido por             a x + b y + c z = d

                                                  vector del plano = ( a, b, c)
                                                  vectror de coeficientes = ( a, b, d)



bool InImage( bicotiCoordinate3D< REAL > &)

          Retorna verdadero si el punto esta en la imagen, falso en caso contrario.



bool ParallelPrincipalsPlanes( bicotiCoordinate3D< REAL >& ,
                                                         bicotiCoordinate3D< REAL >& ,
                                                         bicotiCoordinate3D< REAL >& )

         Función protegida de la clase, cuando se usan cortes de 3D a 2D, se encarga de averiguar si el
         plano de corte es paralelo a alguno de los planos principales. Si es así se resuelve el problema del
         corte. Los parámetros a pasar son tres puntos, si estos definen un plano paralelo a algún plano
         principal, se resuelve el corte y retorna true.



bool EqualPoint( bicotiCoordinate3D< REAL >& , bicotiCoordinate3D< REAL >& )

          En varias ocaciones nos enfrentamos a inestabilidades númericas y puede ocurrir que se tome por
          poca diferencia en su ubicación, dos puntos distintos en ves de uno. Esta función define un criterio
          de igualdad mas adecuado a esas circunstancias.



vector< bicotiCoordinate3D< REAL > > ComputePlaneEdgeCut(
                                                                                                    bicotiCoordinate3D< REAL >,
                                                                                                    bicotiCoordinate3D< REAL > )

         Calcula los cortes del plano con las "aristas" de la imagen, y los retorna en un
          vector< bicotiCoordinate3D< REAL > >.Los parámetros que recibe son el vector de coeficientes y
          el vector del plano de corte( vector perpendicular al plano ).

          Plano definido por             a x + b y + c z = d

                                                  vector del plano = ( a, b, c)
                                                  vectror de coeficientes = ( a, b, d)



bicotiGeometricalFacade3D( bicotiImageImplementatio3D< PixelType > *)

     Constructor del objeto, recibe como argumento una bicotiImageImplementation3D< PixelType > *



~bicotiGeometricalFacade3D( )

            Destructor del objeto.



void BuildAffimTransformation( )

        Crea una transformación afin.

                Con la función Matrix( ) se accede a T, y con Vector( ) se accede a b.



void BuildRotation( double )

           Crea una rotación( caso particular de transformacón affim ) generando la matriz T y el vector b
           adecuados.
           Para definir una rotación en 3D hay que fijar dos parámetros: el eje de rotación, ángulo de
           rotación. Al eje de rotación se fija mediante un punto y una dirección, se accede al punto
           mediante función RotationCenter( ) y a la dirección mediante la función RotationAxis( ) al ángulo
           se pasa como parámetro de esta función.
           El ángulo se expresa en radianes y se mide en sentido antihorario, otra restricción mas es que este
           debe estar entre -pi y pi.



void BuildCutter( bicotiCoordinate3D< REAL >, bicotiCoordinate3D< REAL >,
                                      bicotiCoordinate3D< REAL >,
                                      bicotiImageImplementation2D< PixelType >* )

            Para hacer un corte de 3D a 2D, hay que definir el plano de corte, de la geometría euclídiana
          sabemos que un plano se define mediante tres puntos( estos son los tres primeros parámetros que
          se dan en esta función ). También hay que pasar de que tipo será la imagen resultado, con el
          cuarto parámetro se define esto.



void ApplyAffimTransformation( bool automatic_resize )

        Realiza la transformación afin sobre una imagen, es importante destacar de que este proceso crea la
        imagen resultado no hay que pasarla como argumento. Existen transformaciones afines como por
        ejemplo una rotación, en donde por aplicarla se pierde "información" de la imagen, con
        automatic_resize la imagen se redimensiona para no perder "información", por defecto no se hace y
        la imagen resultado es igual en tamaño a la imagen original.
        Para acceder a los resultados se utilizan a GetResult( ) o LoadResult( ). Observar :



void UsePixelInterpolatorLinear( )

          La información que disponemos es una imagen digital, por lo cual la interpolación es algo con que
          debemos enfrentarnos, existen dos tipos de interpoladores( dos técnicas de interpolación ) al
          momento actual. Si se desea trabajar con la interpolación lineal se usa esta función.



void UsePixelInterpolatorLagrange( )

           La información que disponemos es una imagen digital, por lo cual la interpolación es algo con que
           debemos enfrentarnos, existen dos tipos de interpoladores( dos técnicas de interpolación ) al
           momento actual. Si se desea trabajar con la interpolación lagrange se usa esta función.



bicotiCoordinate3D< REAL > GetOriginSubspace( )

        Durante el corte, se definen parámetros estos podrían quedar poco claros al usuario, recomendamos
        ver bicotiCutter y ejemplos . Mediante esta función se obtiene el origen del subespacio.



bicotiCoordinate3D< REAL > GetVectorISubspace( )

        Durante el corte, se definen parámetros estos podrían quedar poco claros al usuario, recomendamos
        ver bicotiCutter y ejemplos . Mediante esta función se obtiene el vector según_I del subespacio.



bicotiCoordinate3D< REAL > GetVectorJSubspace( )

        Durante el corte, se definen parámetros estos podrían quedar poco claros al usuario, recomendamos
        ver bicotiCutter y ejemplos . Mediante esta función se obtiene el vector según_J del subespacio.



bicotiCoordinate3D< REAL >& RotationAxis( )

          En el caso particular de que la transformación afin sea una rotación, hay que pasar un eje de
            rotación, este queda bien definido con un punto y un vector. El punto se pasa mediante
            RotationCenter( ) y a la dirección se accede mediante RotationAxis( ).