Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: Ray en 20 de Agosto de 2005, 11:42:38 AM

Título: Un Problema De Matrices
Publicado por: Ray en 20 de Agosto de 2005, 11:42:38 AM
 Hola, ¿alguien me puede decir si existe algun método o fórmula para hallar la matriz o matrices de rotación necesarias para orientar un objeto en una dirección determinada en un espacio 3D?

Es decir, conociendo las matrices de dos objetos A y B, pueda multiplicar la matriz de A por la matriz de rotación obtenida para que quede orientado de igual manera que B.

No uso cuaterniones, ni tampoco me sirve copiar los vectores correspondientes, necesitaría la matriz de rotación para ser usada posteriormente también con otros objetos.

Gracias y hasta otra.
Título: Un Problema De Matrices
Publicado por: BeRSeRKeR en 20 de Agosto de 2005, 12:50:18 PM
 Si quieres que un objeto con matriz de transformación A tenga la misma orientación que un objeto con matriz de transformación B, sólo tiene que copiar los elementos M11, M12, M13, M21, M22, M23, M31, M32, M33 de la matriz B en la matriz A. De esa forma estarás copiando la orientación (la matriz 3x3 de la esquina superior izquierda). Eso sí, si la matriz tiene aplicada una escala, también la copiarás ya que la escala se encuentra en la diagonal principal de la matriz.

Saludos.
Título: Un Problema De Matrices
Publicado por: Jikan en 20 de Agosto de 2005, 02:28:56 PM
 Si he entendido bien:

                                          Objeto A: MA ( matriz A )

                                          Objeto B: MB ( matriz B )

       Queremos hallar una matriz de rotación MR tal que: MA*MR = MB (esto es, MR aplicada a la matriz de rotación del
objeto A nos da la matriz de rotación MB del objeto B ).

       Tenemos:

                        MA*MR = MB

        Multiplicando por la izquierda por inv(MA) (esto es, la matriz inversa de MA):

                        inv(MA)*MA*MR = inv(MA)*MB
       
        El producto de una matriz por su inversa en la matriz identidad I

                        I*MR = inv(MA)*MB

        El producto de una matriz M por la matriz identidad I es la matriz M

                        MR = inv(MA)*MB

        Hemos averiguado la matriz de rotación MR. He supuesto que tanto MA como MB son matrices de
rotación (sólo rotación).

                    - Jikan
Título: Un Problema De Matrices
Publicado por: Ray en 22 de Agosto de 2005, 11:40:56 AM
 Ok, funciona correctamente en las pruebas que he hecho, aunque surge el problema al que aludía anteriormente Berserker al copiar directamente los valores. El objeto A no solo toma la orientación del objeto B, también toma la escala, e incluso la posición si multiplico matrices 4x4.

Si tanto MA como MB deben ser solo matrices de rotación para obtener la matriz MR, supongo que debo separar sus componentes de los de la escala y posición. ignorar la posición no tiene problema usando solo las 3 primeras (filas/columnas) pero ignorar la escala parece más complicado en un principio. Supongo que tal vez haya que normalizar los vectores.

Seguiré haciendo más pruebas, aunque dejo este hilo abierto a cualquier comentario o sugerencia al respecto, y gracias por la ayuda, me sera muy útil esa formula, realmente me ha sorprendido por su simpleza y facilidad de aplicación.

Hasta otra.
Título: Un Problema De Matrices
Publicado por: zupervaca en 22 de Agosto de 2005, 01:00:28 PM
 en el 99.9 perido % de los casos la escala es 1,1,1 en juegos