Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Un Problema De Matrices

Iniciado por Ray, 20 de Agosto de 2005, 11:42:38 AM

« anterior - próximo »

Ray

 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.

BeRSeRKeR

 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.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Jikan

 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

Ray

 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.

zupervaca

 en el 99.9 perido % de los casos la escala es 1,1,1 en juegos






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.