vectores tridimensionales puntos plano graficar fisica espacio entre dimensiones componentes como cartesiano calcular angulo math vector 3d rotation linear-algebra

math - tridimensionales - puntos en el espacio



Girando un vector en el espacio 3D (2)

Estoy haciendo un proyecto de Android en OpenGL que utiliza acelerómetro para calcular el cambio en ejes específicos y mi objetivo es rotar el vector de movimiento de mi objeto similar a una nave espacial. El problema es que no puedo entender la matemática detrás de las matrices de rotación. El vector de movimiento predeterminado es 0,1,0, significa + y, por lo que el objeto mira hacia arriba al principio. y estoy tratando de rotar su vector de movimiento para poder mover el objeto donde apunta. Puedo recoger cambios de rotación en el teléfono. eje x: girar [0], eje y: girar [1], eje z: girar [2]. ¿Cómo puedo rotar mi vector de movimiento usando la matriz de rotación?



Si quieres rotar un vector, debes construir lo que se conoce como una matriz de rotación .

Rotación en 2D

Digamos que quiere rotar un vector o punto por θ, luego la trigonometry establece que las nuevas coordenadas son

x'' = x cos θ − y sin θ y'' = x sin θ + y cos θ

Para probar esto, tomemos los ejes cardinales de X e Y; cuando giramos el eje X 90 ° en sentido antihorario, deberíamos terminar con el eje X transformado en el eje Y. Eje X como un vector unitario es

unit vector along X axis = <1, 0> x'' = 1 cos 90 − 0 sin 90 = 0 y'' = 1 sin 90 + 0 cos 90 = 1 New coordinates of the vector = <x'', y''> = <0, 1> => Y-axis.

Cuando comprendes esto, crear una matriz para hacer esto se vuelve simple. Una matriz es solo una herramienta matemática para realizar esto de una manera cómoda y generalizada, de modo que varias transformaciones como la rotación, la escala y la traducción (movimiento) se puedan combinar y realizar en un solo paso, utilizando un método común. Del álgebra lineal, para rotar un punto o vector en 2D, la matriz que se construirá es

|cos θ −sin θ| |x| = |x cos θ − y sin θ| = |x''| |sin θ cos θ| |y| |x sin θ + y cos θ| |y''|

Rotación en 3D

Eso funciona en 2D, mientras que en 3D debemos tomar en cuenta el tercer eje. Girar un vector alrededor del origen (un punto) en 2D simplemente significa rotarlo alrededor del eje Z (una línea) en 3D; dado que estamos girando alrededor del eje Z, sus coordenadas deben mantenerse constantes, es decir, 0 ° (la rotación ocurre en el plano XY en 3D). En 3D girando alrededor del eje Z sería

|cos θ −sin θ 0| |x| |x cos θ − y sin θ| |x''| |sin θ cos θ 0| |y| = |x sin θ + y cos θ| = |y''| | 0 0 1| |z| | z | |z''|

alrededor del eje Y sería

| cos θ 0 sin θ| |x| | x cos θ + z sin θ| |x''| | 0 1 0| |y| = | y | = |y''| |−sin θ 0 cos θ| |z| |−x sin θ + z cos θ| |z''|

alrededor del eje X sería

|1 0 0| |x| | x | |x''| |0 cos θ −sin θ| |y| = |y cos θ − z sin θ| = |y''| |0 sin θ cos θ| |z| |y sin θ + z cos θ| |z''|

Tenga en cuenta que el eje alrededor del cual se realiza la rotación no tiene elementos sin o cos en la matriz. Espero que esto aclare el caso de rotación.

Composición

Las matrices antes mencionadas rotan un objeto como si el objeto estuviera a una distancia r = √ (x² + y²) del origen; buscar coordenadas polares para saber por qué. Esta rotación será con respecto al origen del espacio mundial. Por lo general, necesitamos rotar un objeto alrededor de su propio marco / pivote y no alrededor del mundo. Como no todos los objetos están en el origen mundial, rotar usando estas matrices no dará el resultado deseado de rotar alrededor del propio marco del objeto. Por lo tanto, debe aprender sobre la traducción también. Primero debe traducir (mover) el objeto al origen mundial (para que el origen del objeto se alinee con el del mundo, haciendo así r = 0), realice la rotación con una (o más) de estas matrices y luego traduzca de nuevo a su ubicación anterior. El orden en que se aplican las transformaciones es matters .

Le pido que lea acerca de las transformaciones lineales y afines y su composición para realizar transformaciones múltiples de una vez, antes de jugar con las transformaciones en el código. Sin entender las matemáticas básicas detrás de esto, las transformaciones de depuración serían una pesadilla. Encontré este video de la conferencia como un muy buen recurso. Otro recurso es este tutorial sobre transformaciones que pretende ser intuitivo e ilustra las ideas con animación.

Nota: Este método de realizar rotaciones sigue el sistema de rotación de ángulos de Euler , que es más fácil de enseñar y captar. Esto funciona perfectamente bien para 2D y para casos 3D simples; pero cuando la rotación debe realizarse alrededor de los tres ejes al mismo tiempo, los ángulos de Euler no son suficientes para esto debido a una deficiencia inherente en este sistema que se manifiesta como bloqueo de cardán . La gente recurre a Quaternion en tales situaciones, que es más avanzada que esta, pero no sufre bloqueos cardánicos cuando se usa correctamente.