prusa nivelar modificar marlin impresora ejes eje configurar como calibrar autonivelacion autolevel anet opengl 3d vector alignment matrix

opengl - nivelar - configurar impresora 3d



¿Cuál es la forma más fácil de alinear el eje Z con un vector? (5)

Existen muchos recursos sobre la rotación de sus coordenadas (o rotación de objetos, lo que equivale a lo mismo). Aprendí mucho de este sitio , sobre cómo programar en múltiples dimensiones y especialmente cómo manipular vectores

Dado un punto como (0, 0, 0) y un vector como (x, y, z). ¿Cuál es la forma más fácil de alinear el eje Z negativo centrado en (0, 0, 0) para apuntar en la dirección de este vector? Los ejemplos que usan OpenGL serían bienvenidos, pero no necesarios.


Hay muchas formas diferentes de rotar un marco de coordenadas para apuntar en una dirección dada; todos dejarán el eje z apuntando en la dirección que desee, pero con variaciones en la orientación de los ejes xey.

Lo siguiente te da la rotación más corta, que puede o no ser lo que quieres.

vec3 target_dir = normalise( vector ); float rot_angle = acos( dot_product(target_dir,z_axis) ); if( fabs(rot_angle) > a_very_small_number ) { vec3 rot_axis = normalise( cross_product(target_dir,z_axis) ); glRotatef( rot_angle, rot_axis.x, rot_axis.y, rot_axis.z ); }


La página aquí tiene una sección "Transformaciones para mover un vector al eje z" que parece ser lo que quiere, o quizás la inversa de ello.


Probablemente quiera echar un vistazo al artículo de Diana Gruber


Para responder a mi propia pregunta, la mejor respuesta que he encontrado es esta:

Divida el vector en "componentes". El componente x es el desplazamiento a lo largo del eje x. Si pasamos a la trigonometría, tenemos esa cos (alfa) = x / vector_magnitude. Si calculamos el RHS, entonces podemos derivar alfa, que es la cantidad por la cual tendríamos que girar alrededor del eje y.

Luego, el sistema de coordenadas se puede alinear con el vector mediante una serie de llamadas a glRotatef ()