Loading [MathJax]/jax/element/mml/optable/GeneralPunctuation.js

20 votos

Giratoria 3-uno vector a otro

He escrito un algoritmo para resolver el siguiente problema: Dados dos 3-vectores, decir: a,b, hallar la rotación de a, de modo que su orientación coincide con b.

Sin embargo, no estoy seguro de si el siguiente algoritmo funciona en todos los casos:

1) Encontrar el eje y el ángulo utilizando el producto vectorial y producto escalar:

x=a×b||a×b||θ=cos1(ab||a||||b||)

3) Encontrar la matriz de rotación utilizando exponencial mapa:

R=eAθ=I+sin(θ)A+(1cos(θ))A2

donde A es un sesgo de simetría de la matriz correspondiente a x:

A=[x]×=[0x3x2x30x1x2x10]

Notas:

El eje se calcula utilizando la cruz del producto ya que esto da un vector perpendicular tanto a aab. Sólo la dirección del eje es importante, por lo que se divide por su magnitud. Sin embargo, no estoy seguro de si x siempre tendrá la dirección correcta (el resultado puede ser x en lugar de x?).

La matriz de rotación se calcula utilizando Rodrigues' rotación de la fórmula.

Finalmente, el vector Ra debe tener la misma dirección como b.

He probado este numéricamente y parece que funciona, pero me gustaría estar seguro de que las fórmulas de trabajo para cualquiera de los dos a,b.

11voto

Rob Dickerson Puntos 758

Esta es la derecha debe manejarse planteamiento general, pero la esquina caso .

Si \theta < \epsilon, R=I.

Si \pi-\theta < \epsilon, usted puede elegir para \mathbf{x} cualquier vector ortogonal a \mathbf{a}, por ejemplo \mathbf{x} = \frac{\mathbf{a} \times e_i}{\|\mathbf{a}\times e_i\|}, donde i es el índice del componente de \mathbf{a} con menos magnitud.

4voto

levibostian Puntos 131

Deje F_n(x) = x - {2 \over n . n} n (n \ . \ x) ser la transformación que refleja x a través del plano que es perpendicular a n. Componer dos reflexiones da un giro: si el ángulo de a b \phi F_b(F_a(x))rota x sobre el plano atravesado por ab2 \phi.

Dados los vectores normalizados \hat a=a/|a|, \hat b=b/|b|, \hat c=c/|c|, donde c = \hat a + \hat b, el ángulo de\hat a\hat c\phi, la mitad que el ángulo de\hat a\hat b.

De hecho, F_{\hat c}(F_{\hat a}(x)) rota x \phi sobre el plano atravesado por ab. Esto es válido incluso si a b son paralelas. Esto evita el cálculo de una cruz de producto, y la inversa del coseno, seno y coseno, o la división por una magnitud que puede ser arbitrariamente cercano a cero.

2voto

Muphrid Puntos 12245

No tengo claro por qué tiene un factor de A^2 R en su expresión. En particular, wikipedia enumera la matriz forma la fórmula de Rodrigues como

R = I \cos \theta + A \sin \theta + (1-\cos \theta) x x^T

1voto

joshuahedlund Puntos 108

Tengo un sencillo método proviene "Mecánica de la Continua" de Erigen. Aquí R es la matriz de rotación que gira de vectores "a" alinea con el vector "b"

Código de MATLAB:

%%%%%% Rotate vector a align with vector b%%%%%%%%%%
syms ax ay az bx by bz k real

a=[ax ay az]'

au=a./sqrt(ax^2+ay^2+az^2)

b=[bx by bz]'

bu=b./sqrt(bx^2+by^2+bz^2)

R=[bu(1)*au(1) bu(1)*au(2) bu(1)*au(3);

    bu(2)*au(1) bu(2)*au(2) bu(2)*au(3)

    bu(3)*au(1) bu(3)*au(2) bu(3)*au(3)]

% You can verify it by type

c=R*a

cu=c./sqrt(c(1)^2+c(2)^2+c(3)^2)

simple(bu-cu)

%the result is zero means c(a after rotation) and b are aligned with each other.  

simple(sqrt(c(1)^2+c(2)^2+c(3)^2)-sqrt(c(1)^2+c(2)^2+c(3)^2))

%the result is zero means c(a after rotation) and a are of the same length


%%%%%%%End%%%%%%%%%%%%

0voto

function [ R ] = RotAtoB( a,b )
    x = [a(2)*b(3) - b(2)*a(3);a(3)*b(1) - b(3)*a(1);a(1)*b(2) - b(1)*a(2)];
    x = x/norm(x);
    theta = acos(a'*b/(norm(a)*norm(b)));
    A = [0    -x(3)  x(2)
         x(3)   0   -x(1)
        -x(2)  x(1)   0  ];
    R = eye(3) + sin(theta)*A + (1-cos(theta))*A^2;
end

Calcular las potencias de la matriz: potencia n-ésima de una matriz cuadrada y la Binet fórmula para la secuencia de Fibonacci

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