Ver Mensaje Individual
  #2  
Antiguo 05-04-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Reputación: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Tampoco soy físico, sin embargo creo que esto es mejor que lo calcules utilizando vectores y matrices. Es decir, crea una unidad que puedes llamar "Mates3D" o similar y creas una o dos clases: una para vectores 3D y otra para matrices cuadradas de orden 4. Por ejemplo, para el vector puedes definirlo así:
Código Delphi [-]
TVector3D = CLASS
PRIVATE
  fx, fy, fz: REAL;
PUBLIC
(* Método para normalizar el vector (vector equivalente de longitud 1). *)
   PROCEDURE Normaliza;
(* Método para sumar vectores. *)
   PROCEDURE Suma (aOtroVector: TVector3D);
(* Método para calcular la longitud del vector. *)
   FUNCTION Longitud: REAL;
(* Método para multiplicar un escalar al vector. *)
   PROCEDURE ProductoEscalar (aEscalar: REAL);
(* Método para producto cruzado (se usa para calcular la normal de un plano, por ejemplo). *)
   FUNCTION ProductoCruzado (aVector: TVector3D): TVector3D;

  PROPERTY x: REAL READ fx WRITE fx;
  PROPERTY y: REAL READ fy WRITE fy;
  PROPERTY z: REAL READ fz WRITE fz;
END;

Y para la matriz:
Código Delphi [-]
TMatriz4 = CLASS
PRIVATE
   fComponentes: ARRAY [1..4, 1..4] OF REAL;

   FUNCTION AsignaComponente (m, n: INTEGER; v: REAL);
   PROCEDURE ObtieneComponente (m, n: INTEGER): REAL;
PUBLIC
(* Calcula el determinante. *)
   FUNCTION Determinante: REAL;
(* Multiplica ambas matrices. *)
   FUNCTION MultiplicaMatriz (aMatriz: TMatriz4): TMatriz4;
(* Multiplica la matriz y el vector (asume que el componente w del vector es 1). *)
   FUNCTION MultiplicaVector (aVector: TVector3D): TVector3D;

   Componente[m, n: INTEGER]: REAL READ ObtieneComponente WRITE AsignaComponente;
END;

Etcétera. La implementación ya te la dejo, porque son matemáticas "básicas". También has de tener en cuenta que puede que falte alguna operación, y también que quizá haya que cambiar parámetros de las que he puesto, porque lo he hecho de memoria y sin pensar mucho.

La idea es que la mayor parte de las fórmulas físicas son más fáciles de "traducir" utilizando vectores y matrices, puesto que las propias fórmulas físicas los utilizan.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita