es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Extraer la rotación de Euler de una matriz usando Maya.

Estoy tratando de extraer la rotación de un objeto basado en estos valores:

[ 0.00000000, 0.00000000, 0.00000000,
0.33333334, -0.53828228, 0.00000000,
0.66666669, -1.07656455, 0.00000000,
1.00000000, -1.61484683, 0.00000000 ]

No estoy seguro de cómo hacerlo correctamente… Encontré algunas soluciones en línea, pero ninguna funcionó para mí ya que todos los valores utilizados en esos ejemplos eran un poco diferentes del que se muestra arriba.
¿Alguien sabe cómo extraerlo utilizando Python/OpenMaya?
Agradecería cualquier ayuda.
Gracias de antemano.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para extraer la rotación de un objeto basado en los valores dados, puedes usar la representación de ángulos de Euler. Los ángulos de Euler describen la orientación del objeto con respecto a un sistema de coordenadas fijo mediante tres rotaciones alrededor de tres ejes ortogonales. Las tres rotaciones se suelen especificar en el orden de cabeceo-picado-enrollamiento, o equivalentemente, orientación-elevación-banco.

    En los valores dados, los primeros 3 valores [0,0,0] son el punto de inicio de las rotaciones. Los siguientes 3 valores [0.33333334, -0.53828228, 0.00000000] representan la primera rotación, es decir, una rotación alrededor del eje X por -30 grados (en radianes, -0.53828228). De manera similar, la segunda rotación es alrededor del eje Y por -60 grados (en radianes, -1.07656455), y la tercera rotación es alrededor del eje Z por 0 grados.

    Para extraer la información de rotación usando Python/OpenMaya, puedes utilizar el siguiente fragmento de código:

    import math
    import maya.api.OpenMaya as om
    
    # Convertir los valores dados en una matriz de transformación 4x4
    m = om.MMatrix([0.0, 0.0, 0.0, 0.0,
                    0.33333334, -0.53828228, 0.0, 0.0,
                    0.66666669, -1.07656455, 0.0, 0.0,
                    1.0, -1.61484683, 0.0, 0.0])
    
    # Extraer la rotación como ángulos de Euler
    m_euler = om.MEulerRotation()
    m_euler.setValue(m)
    eulerAngles = [math.degrees(a) for a in [m_euler.x, m_euler.y, m_euler.z]]
    
    # Imprimir los ángulos de Euler
    print(eulerAngles)
    

    Esto imprimirá los ángulos de rotación en grados: [0.0, -60.0, -30.0]. Ten en cuenta que el orden de los ángulos de Euler depende del orden de rotación utilizado para extraerlos. En este caso, se utilizó el orden de rotación XYZ por defecto.

Comments are closed.