1 votos

Rotación 3D de un objeto con respecto a la rotación de otro objeto

Estoy escribiendo un código en python para trasladar y rotar un objeto con respecto a otro. Por favor, eche un vistazo a la imagen de abajo:

object rotation with respect to another

La cara sonriente y la flecha tienen poses iniciales (posición y orientación) como se muestra en la imagen de la izquierda. Luego, la cara gira. Quiero que la flecha rote y se mueva a la pose mostrada en la imagen de la derecha. Puedo imaginar cómo hacerlo en 2D. Sin embargo, me resulta difícil extenderlo a 3D.

Así, el problema es el siguiente: Dada la pose 3D inicial y la actual del objeto x (digamos la cara) y la pose inicial del objeto y (flecha), encontrar una transformación T tal que si transformamos la pose inicial de y usando T, los objetos x e y mantengan su pose inicial uno respecto del otro cuando la pose del objeto x cambie.

Las poses que obtengo son cuaterniones, sin embargo, tengo una biblioteca de python que puedo usar para convertirlas en ángulos de Euler y matrices de rotación (y viceversa), así que, eso no es un problema.

0voto

Optomo Puntos 41

Finalmente, he descubierto cómo podemos hacerlo.

considera que x_position y y_position son las posiciones 3D iniciales de x, e y respectivamente. Y x_orientation e y_orientation son las orientaciones iniciales de x, e y respectivamente. x'_position e y'_position son la posición actual de x e y y x'_orientation , y'_orientation son las orientaciones actuales de x e y.

y'_position = (x'_position - x_position) 
            - (y_position - x_position)
            + (y_position - x_position)*(x'_orientation - x_orientation)

y'_orientation = mat(x'_orientation - x_orientation)*mat(y_orientation)

mat convierte los ángulos de Euler o el cuaternión en matriz de rotación. Para la posición, básicamente, traducimos y a x, lo rotamos usando la matriz de rotación que obtuvimos de la rotación de x, y lo volvemos a traducir a su nueva posición.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X