#ifndef _CALGEBRA #define _CALGEBRA #include //AÑADIDO #include //AÑADIDO #include "Macros.h" #include "vtkesquiT2MeshWin32Header.h" //Clases basicas de geometria y algebra class Punto; class Matriz; class Transformacion; class Matriz3d; //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //! Actua indistintamente como punto o vector almacenado 4 coordenadas o componentes class VTK_ESQUI_TMESH_EXPORT Punto { public: //! Coordenadas homogeneas float x,y,z,w; //! Constructor por defecto Punto(float xx=0.0, float yy=0.0, float zz=0.0, float ww=1.0); //! Suma de puntos Punto operator +(Punto p); //! Resta de puntos Punto operator -(Punto p); //! Producto por un escalar Punto operator *(float k); //! Considerado como vector float operator [](int i); //! Producto por una matriz Punto operator *(Matriz m); //! Transformacion de un punto Punto transformar(Transformacion &t); //! Punto con el signo cambiado Punto negado(); //! Normaliza el punto y se devuelve asi mismo Punto normalizar(); //! Vector unitario en esa direccion Punto unitario(); //! Calcula el modulo del vector float modulo(); //! Calcula la longitud esferica del vector float longitud(); //! Calcula la latitud esferica del vector float latitud(); //! Calcula el producto escalar float operator *(Punto p); //! Calcula el producto vectorial Punto operator ^(Punto p); //! Devuelve el punto con w=1 Punto homogeneo(); //! Escribe el punto void escribir(); //! Compara puntos BOOL operator ==(Punto p); private: //! esta normalizado int esUnitario; }; //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //! Matriz de 4x4 coordenadas o Matriz vector de 4 puntos class VTK_ESQUI_TMESH_EXPORT Matriz { public: float e[4][4]; //! Construye la identidad por defecto Matriz(); //! Constructor por columnas Matriz(Punto e1,Punto e2, Punto e3,Punto e4=Punto()); //! Devuelve un punto con la fila i(0..3) Punto fila(int i); //! Devuelve un punto con la columna i(0..3) Punto columna(int i); //! Asignacion de matrices Matriz operator =(const Matriz &); //! Producto de matrices Matriz operator *(Matriz m); //! Producto por un vector Punto operator *(Punto p); //! Producto por capas con una matriz 3d Matriz3d operator *(const Matriz3d &); //! Producto por un escalar Matriz operator *(float k); //! Traspone filas y columnas Matriz operator !(); //! Escribe la matriz void escribir(); }; //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //! Matriz de transformacion derivada de matriz que acumula transformaciones 3D /*! La acumulacion es LIFO sobre el punto pensando en coordenadas fijas y se debe aplicar por la izquierda del punto en columna (idem GL) Ej: P' = M1*M2*M3*P (M3 fue la ultima en acumularse y la primera en aplicarse) */ class VTK_ESQUI_TMESH_EXPORT Transformacion: public Matriz { public: //! Acumula la traslacion propuesta void traslacion(Punto d); //! Acumula el escalado void escalado(float sx=1.0,float sy=1.0,float sz=1.0, Punto centro=Punto()); //! Acumula el giro (ang en grados) void giro(float ang, Punto vectorEje, Punto enRecta=Punto() ); //! Acumulacion de giros especificos (ang en grados) void giroX(float ang); //! Acumulacion de giros especificos (ang en grados) void giroY(float ang); //! Acumulacion de giros especificos (ang en grados) void giroZ(float ang); //! Acumula un cambio de base dado por los ejes u, v, w void giro(Punto u, Punto v, Punto w); void identidad(); }; //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //! Matriz cubica de 4x4x4 (filas X columnas X capas) class VTK_ESQUI_TMESH_EXPORT Matriz3d: public Matriz { public: float e[4][4][4]; Matriz3d(); //! Constructor por columnas Matriz3d(Matriz , Matriz , Matriz , Matriz ); //! Devuelve el punto en fila i, columna j Punto fiCo(int i,int j); //! Mete el punto en la posicion i,j Matriz3d ponerEn(int i, int j, Punto p); //! Asignacion de matrices 3d Matriz3d operator =(const Matriz3d &); //! Producto por capas con una matriz Matriz3d operator *(const Matriz &); void escribir(); }; //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #endif