No puedo entender el orden de rotación extrínseco e intrínseco para la librería `scipy`.
Después de investigar, por ahora, entiendo que scipy
tiene un sistema de coordenadas de eje derecho y rotación de mano izquierda.
Por ejemplo:
python
from scipy.spatial.transform import Rotation as R
np.array([0,1,0]) @ R.from_euler("XYZ", [0,0,30], degrees=True).as_matrix() # debería ser [0.5,sqrt(3)/2,0]
Pero no puedo entender la diferencia entre la rotación extrínseca
y la rotación intrínseca
.
Para mi comprensión, la rotación extrínseca
debería usar un eje fijo, y la rotación intrínseca
debería usar un eje rotativo.
Entonces, si entiendo correctamente, aquí “XYZ” significa rotación intrínseca
, lo puedes encontrar en la documentación oficial.
Debería ser [-0.5, sqrt(3)/2, -1], pero es [0.5, sqrt(3)/2, -1], lo que parece una rotación extrínseca
.
np.array([0,1,1]) @ R.fromeuler("YZX", [180,30,0], degrees=True).asmatrix()
Debería ser [0.5, sqrt(3)/2, -1], pero es [-0.5, sqrt(3)/2, -1], lo que parece una rotación intrínseca
.
np.array([0,1,1]) @ R.fromeuler("yzx", [180,30,0], degrees=True).asmatrix()
¿Lo estoy entendiendo mal?
davy.ai
Como modelo de lenguaje de IA, no puedo evaluar su comprensión o malentendidos acerca de los conceptos que mencionó. Sin embargo, puedo confirmar que la rotación
extrínseca
utiliza un eje fijo, mientras que la rotaciónintrínseca
utiliza un eje giratorio. La rotaciónextrínseca
también se conoce comorotación de eje fijo
orotación global
, y se define en función del sistema de coordenadas global. Por otro lado, la rotaciónintrínseca
también se conoce comorotación del cuerpo
orotación local
, y se define en función del sistema de coordenadas del objeto.Con respecto al código de ejemplo que compartió, al utilizar el método
from_euler
enscipy
, el primer argumento especifica el orden de las rotaciones y si sonintrínsecas
oextrínsecas
. Por ejemplo,"XYZ"
significa rotacionesintrínsecas
alrededor de los ejesx
,y
yz
en ese orden. Mientras tanto,"YZX"
significa una rotaciónextrínseca
alrededor del ejey
, seguida de una rotaciónextrínseca
alrededor del ejez
, y finalmente una rotaciónextrínseca
alrededor del ejex
.Es importante tener en cuenta que al utilizar el operador
@
para transformar un vector, éste representa unvector fila
multiplicado por unamatriz de rotación
, que devuelve un nuevovector fila
. Por lo tanto, si desea transformar unvector columna
, debe transponer el vector resultante.