27 votos

¿Cómo girar un vector sobre otro?

Breve
Dados 2 vectores no paralelos: a y b ¿hay alguna manera de que pueda rotar a sobre b tal que b actúa como el eje alrededor del cual a ¿está girando?

Pregunta
Dado : vector a y b
Para encontrar : vector c donde c se produce al girar a sobre b por un ángulo en el sentido de las agujas del reloj, según la regla del pulgar derecho.
Editar: ¡Hay un problema con la imagen! se supone que debe ser girado en el sentido de las agujas del reloj por la regla del pulgar derecho a diferencia de cómo se muestra en la imagen (pero no debería haber mucha diferencia en la solución). enter image description here

Regla del pulgar derecho : "Envuelve los dedos de tu mano derecha alrededor del vector b de manera que el pulgar apunte en la dirección del vector b . Entonces, la dirección de la curvatura del resto de los dedos indicará la dirección a se girará en torno a b "

9 votos

0 votos

@reubenjohn: ¡bueno, aquí está! ¡¡¡Bienvenido!!! Me pondré con esto en un rato, como prometí .

0 votos

@reubenjohn: gran foto, por cierto. Cuál es tu SW de gráficos?

17voto

MNKY Puntos 106

Método de componentes ortogonales:

$\vec a$ gira en torno a $\vec b$ en el sentido de las agujas del reloj por $\theta$ rad según el regla de la mano derecha donde el pulgar representa $\vec b$ y la curvatura de los dedos representa el sentido de la rotación . Este método consiste en encontrar $\vec a_{\perp b}$ el componente de $\vec a$ ortogonal a $\vec b$ y girándolo por $\theta$ a lo largo del plano con la normal $\vec b$ .

$\vec a$ puede descomponerse en dos componentes: $$\vec a = \vec a_{\parallel \vec b} + \vec a_{\perp \vec b}$$

$\vec a_{\parallel \vec b}$ es el componente de $\vec a$ en dirección a $\vec b$ $$\vec a_{\parallel \vec b} = \Big(\dfrac{\vec a\cdot \vec b}{\vec b\cdot \vec b} \Big)\vec b$$ $\vec a_{\perp b}$ es el componente de $\vec a$ en la dirección ortogonal a $\vec b$ $$ $$

\begin{align*} \vec a_{\perp \vec b} =& \vec a - \vec a_{\parallel \vec b} \\ \\\vec a_{\perp \vec b}=& \vec a - \Big(\dfrac{\vec a\cdot \vec b}{\vec b\cdot \vec b} \Big) \vec b \end{align*}

Nuestro siguiente paso es determinar $\vec w = \vec b \times \vec a_{\perp \vec b}$

Este vector ortogonal a ambos $\vec a_{\perp \vec b}$ y $\vec b$ .

Entonces tenemos que encontrar una combinación lineal de $\vec a_{\perp \vec b}$ y $\vec w$ que representa una rotación de $\vec a_{\perp \vec b}$

$$\vec a_{\perp \vec b, \theta} = ||\vec a_{\perp \vec b}||(x_1 \vec a_{\perp \vec b} + x_2 \vec w)$$

Dónde: $$ x_1 = \dfrac{cos(\theta)}{||\vec a_{\perp \vec b}||} $$

y:

$$x_2 = \dfrac{sin(\theta)}{||\vec w||}$$

Finalmente podemos hacer que nuestro vector que representa la rotación de $\vec a$ alrededor de $\vec b$ por $\theta$ rad:

$$\vec a_{b,\theta} = \vec a_{\perp \vec b, \theta} + \vec a_{\parallel \vec b}$$

*NOTA:

1) Como comprobación preliminar de la creencia, haga $(\theta = \pi/2$ ) o ( $\theta = 0$ ) y mira lo que el $sin(\theta)$ y $cos(\theta)$ en la ecuación de $\vec a_{\perp \vec b, \theta}$ do.*

2) Si necesitas más demostración de que la última ecuación es el vector que buscamos sólo tienes que preguntar

3) El método descrito anteriormente es una adaptación de la rotación "Rodrigues

Bibliografía: "Álgebra lineal con aplicaciones" de Steven J. Leon https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula

3 votos

He implementado esto en Python/Numpy. Gracias. gist.github.com/fasiha/

0 votos

Me alegro de que te haya resultado útil @Ahmed Fasih . Se ve muy bien en el código.

1 votos

¡Igual! Exactamente lo que necesitaba y muy bien explicado.

7voto

sholsinger Puntos 1570

A grandes rasgos, lo que quieres es hacer esto:

  1. Comienza con $v_1 = b/|b|$ y extenderlo a una base ortonormal $\{v_1, v_2, v_3\}$ de $\mathbb{R}^3$

  2. Escribe estos vectores como columnas de una matriz $P$ (Obsérvese que $P$ es invertible)

  3. Considere la matriz $B = PAP^{-1}$ donde $$ A = \begin{pmatrix} 1 & 0 & 0 \\ 0 & \cos(\theta) & -\sin(\theta) \\ 0 & \sin(\theta) & \cos(\theta) \end{pmatrix} $$

  4. El vector que busca es $$ c = B(a) $$

0 votos

Por "Empezar con v1", ¿quieres decir "v" para que su extensión ortonormal sea {v1,v2,v3}

0 votos

¡También tengo una duda! Por lo que he entendido del PAP-1, el orden de P será [1x3], A es [3x3] y el producto será [1x3] que no se puede multiplicar con P-1 de orden [1x3].

2 votos

¡No, no! $P$ es un $3\times 3$ matriz - cada columna es una $1\times 3$ vector $v_i$

5voto

rschwieb Puntos 60669

Una solución con cuaterniones:

Identificar los cuaterniones con parte real cero con vectores en $3$ -espacio según un sistema de coordenadas cartesianas: el $x$ se convierte en el coeficiente de $i$ El $y$ eje para $j$ y el $z$ eje para $k$ . En particular, tenemos cuaterniones $A=a_xi+a_yj+a_zk$ y $B=b_xi+b_yj+b_zk$ correspondientes a los vectores $a=(a_x,a_y,a_z)$ y $b=(b_x,b_y,b_z)$ .

Dejemos que $u$ sea el cuaternión $B$ normalizado a la unidad de longitud.

Para su ángulo $\theta$ (medido en radianes en el sentido de las agujas del reloj según la regla de la mano derecha con $B$ ) calcula $q=\cos(\theta/2)+u\sin(\theta/2)$ .

La transformación $x\mapsto qxq^{-1}$ gira el $3$ -espacio de cuaterniones puramente complejos $\theta$ grados en el sentido de las agujas del reloj alrededor del eje presentado por $u$ (que es lo mismo que el eje $B$ da). Tenga en cuenta que $q^{-1}$ es sólo $\cos(\theta/2)-u\sin(\theta/2)$ .

Observe que $qBq^{-1}=|B|quq^{-1}=|B|u=B$ , demostrando que $B$ es el eje.

Así que para saber dónde $a$ va, calcula $qAq^{-1}$ e interpretar el cuaternión resultante como un vector en $3$ -espacio.

1 votos

¿QAq1 producirá un cuaternión puro? si es así, ¿cuál es la forma más sencilla de calcularlo? (¡agradecería mucho que se produjera una fórmula general para los valores de x, y y z del vector resultante (cuaternión puro)!

1 votos

@reubenjohn Sí, producirá un cuaternión puro: tiene que serlo, si no, no podrías interpretar que está en tu $3$ -espacio. Funciona porque $q^{-1}=\overline{q}$ . Para cualquier cuaternión $A$ y el cuaternión de longitud unitaria $q$ la parte real de $qAq^{-1}$ es $(qA\overline {q}+\overline {qA \overline {q}})/2=(qA\overline {q}+\overline{\overline{q}}\overline{A}\overline{q})/2=q(\frac{A+\overline{A}}{2})\overline{q}=\frac{A+\overline{A}}{2}$ muestra que $A$ y $qAq^{-1}$ tienen las mismas partes reales. Si $A$ era puramente imaginario para empezar, entonces también lo es $qAq^{-1}$

0 votos

@reubenjohn En cuanto a hacer los cálculos, puedes simplemente enchufar tus coordenadas a los cuaterniones y multiplicar. Creo que sería mucho más beneficioso para tu comprensión que lo manejaras tú mismo, tanto si decides hacer los cálculos a mano como si utilizas los cuaterniones en un programa. Escribir fórmulas complicadas no es un buen uso de mi tiempo, y usarlas a ciegas tampoco te ayuda :)

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