26 votos

¿Cómo puedo calcular un ángulo diedro a partir de unas coordenadas cartesianas?

Tengo el $(x, y, z)$ coordenadas de cuatro puntos en el espacio (átomos). ¿Cómo puedo calcular el ángulo diedro ( $\phi$ en las siguientes imágenes de WP)?

Estoy algo confuso con las matemáticas, y estoy intentando implementar alguna función para esto en Python, así que se agradecería un nivel de programador más bajo.

enter image description here

enter image description here

0 votos

En cuanto al nivel que debe tener la respuesta, ¿estás familiarizado con: la suma y la resta de vectores? el producto punto y el producto cruz? el vector normal a un plano?

0 votos

Producto de punto recuerdo, cruz un poco menos, aunque fui a leer el artículo sobre él, así que un poco mejor.

18voto

theog Puntos 585

Parece que aún no se ha dado una respuesta completa. Aquí está lo que creo que es la solución más directa y numéricamente estable, expresada de una manera que es fácil de implementar. Se solapa mucho con las respuestas de Vhailor y Jyrki, así que la he marcado como wiki comunitaria.

  1. Dadas las coordenadas de los cuatro puntos, obtener los vectores $b_1$ , $b_2$ y $b_3$ por sustracción de vectores.

  2. Permítanme utilizar la notación no estándar $\langle v \rangle$ para indicar $v/\lVert v \rVert$ el vector unitario en la dirección del vector $v$ . Calcula $n_1 = \langle b_1 \times b_2 \rangle$ y $n_2 = \langle b_2 \times b_3 \rangle$ los vectores normales a los planos que contienen $b_1$ y $b_2$ y $b_2$ y $b_3$ respectivamente. El ángulo que buscamos es el mismo que el ángulo entre $n_1$ y $n_2$ .

  3. Los tres vectores $n_1$ , $\langle b_2 \rangle$ y $m_1 := n_1 \times \langle b_2 \rangle$ forman un marco ortonormal. Calcula las coordenadas de $n_2$ en este marco: $x = n_1 \cdot n_2$ y $y = m_1 \cdot n_2$ . (No es necesario calcular $\langle b_2 \rangle \cdot n_2$ ya que debería ser siempre cero).

  4. El ángulo diedro, con el signo correcto, es $\operatorname{atan2}(y,x)$ .

(La razón por la que recomiendo el argumento de dos $\operatorname{atan2}$ a la función tradicional $\cos^{-1}$ en este caso es tanto porque produce naturalmente un ángulo en un rango de $2\pi$ y porque $\cos^{-1}$ está mal condicionada cuando el ángulo es cercano a $0$ o $\pm\pi$ .)

2 votos

Una nota sobre la dirección de $\phi$ según el diagrama (y el definición en wikipedia ), no utiliza la regla de la derecha a lo largo del vector $b_2$ . En cambio, utiliza la regla de la mano izquierda sobre $b_2$ .

0 votos

@stvn66: ¿también te has dado cuenta de que hay dos CA_i+1 en el diagrama?

0 votos

Perdón por la confusión. ¿Pero el ángulo diedro es único? Por ejemplo, ¿el ángulo será el mismo si elijo (i) el n1 como producto cruzado de b1, b3 y n2 como producto cruzado de b3, b1, o (ii) si elijo los vectores b de forma diferente (digamos entre 3 y 1, 1 y 2, 2 y 4)?

4voto

John Richardson Puntos 1197

Creo que lo que buscas (si he entendido bien la imagen) es el ángulo entre los planos abarcados por b1,b2 y b2,b3.

Una forma de hacerlo es calcular el ángulo vectorial entre $b_1 \times b_2$ y $b_2 \times b_3$ , donde $\times$ es el producto cruzado de vectores (deberías poder encontrar la fórmula en wikipedia). Puedes calcular este ángulo con varios métodos, como el mencionado por Ross. Dependiendo de si b1 y b3 se encuentran en el plano del segundo dibujo, mi respuesta y la de Ross pueden dar el mismo resultado.

2voto

Por favor, corríjame si interpreto mal su pregunta y/o su imagen. Lamentablemente es una posibilidad real. A juzgar por la figura inferior entiendo que quieres el siguiente ángulo. Primero proyectas ortogonalmente los vectores $-\vec{b}_1$ y $\vec{b}_3$ al plano que es ortogonal al vector $\vec{b}_2$ . El ángulo $\phi$ es entonces el ángulo entre estas dos proyecciones. Fíjate en el signo menos. Esto es necesario, porque parece que quieres tener $\phi=\pi$ cuando las dos proyecciones apuntan en la misma dirección.

Si esta es la interpretación correcta, entonces puede proceder como sigue. El mapa de proyección viene dado por la fórmula $$ p(\vec{x})=\vec{x}-\frac{\vec{x}\cdot\vec{b}_2}{\vec{b}_2\cdot\vec{b}_2}\vec{b}_2. $$ Entonces se obtiene el coseno del ángulo $\phi$ a partir de la fórmula habitual $$ -p(\vec{b}_1)\cdot p(\vec{b}_3)=|p(\vec{b}_1)|\, |p(\vec{b}_3)|\cos\phi. $$ Esto le da $\cos\phi$ y te deja elegir entre dos ángulos: uno en el intervalo $[0,\pi]$ el otro en $[-\pi,0]$ . Necesitamos conocer el signo de $\sin\phi$ para decidir entre los dos. Leí su imagen inferior en la forma en que el vector $\vec{b}_2$ está apuntando lejos de la cámara. Esto determina la orientación. Aprovechamos esta circunstancia para calcular el producto cruzado $$ \vec{u}=p(\vec{b}_1)\times p(\vec{b}_3). $$ Entonces el producto interior $\vec{u}\cdot \vec{b}_2$ tiene el mismo signo que $\sin\phi$ --- a no ser que haya cometido un error sistemático :-). Vamos a comprobarlo. Si el ángulo de tu foto está en el intervalo $[0,\pi]$ Entonces puedo girar el pulgar de mi mano derecha a lo largo de $p(-\vec{b}_1)$ el dedo índice a lo largo de $p(\vec{b}_3)$ por lo que el dedo corazón apuntará en la dirección opuesta a $\vec{b}_2$ . Por lo tanto, necesito usar $p(\vec{b}_1)$ frente a su negativo.

2voto

proheroes Puntos 1

Para aclarar una ambigüedad a la, por otra parte, gran respuesta de Rahul, el uso de la notación no estándar para sus vectores unitarios podría dar dos posibles respuestas.

Para el vector ortogonal $n_2 =⟨b_2×b_3⟩$ esto no es el producto cruzado normalizado por sus componentes... $$n_2 = b_2×b_3$$ Tal que... $$⟨n_2⟩=\frac{n_2}{∥n_2∥}$$ Más bien, es el producto cruzado de los vectores normalizados $b_2$ y $b_3$ ... $$n_2 = ⟨b_2⟩×⟨b_3⟩$$

0voto

Shabaz Puntos 403

Puedes utilizar el producto punto: $\vec{b_1}\cdot\vec{b3}=|b_1||b_3|\cos \phi$ Así que $\phi=\arccos \frac{\vec{b_1}\cdot\vec{b3}}{|b_1||b_3|}$

1 votos

El rango de arccos es sólo de 0 a $\pi$ ¿Cómo puedo tener en cuenta los otros ángulos?

0 votos

Ese es el ángulo entre los vectores $b_1$ y $b_3$ no el ángulo diedro, que como su nombre indica es entre dos planos.

0 votos

@Nick : Siempre hay dos ángulos entre dos planos (igual que entre dos vectores en $R^2$ ), uno de ellos será menor que $pi$ y por convención es la que elegimos. No hay realmente una manera de dar una "orientación" a los ángulos como en $R^2$ por lo que no podemos hacerlo mejor y tener una forma canónica de elegir qué ángulo debemos medir, por lo que siempre medimos el más pequeño.

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