5 votos

Rotación por elevación de una matriz en coordenadas polares

Aclaración: parece que no soy capaz de entender esto, porque QUIZÁS el programa que estoy usando para visualizar datos 3D realiza algún tipo de transformación que desconozco, por lo que produce resultados que no se ajustan a lo que yo esperaría.

Tengo un diagrama de antena en 3D, que se describe mediante una matriz 2D de 181 x 360 puntos (uno cada 1° para cada dimensión). Sea phi sea el plano con 360 puntos (0° a 359°) asociado al ángulo acimutal, y theta el que tiene 181 (0° a 180°) puntos asociados al ángulo de elevación. R sería en cambio el valor de la matriz por las coordenadas phi y theta.

Como nos movemos sobre una superficie esférica, el punto phi = x y theta = 180° + y es igual a phi = x + 180° y theta = 360° - (180° + y) .

Ahora, supongamos que tengo que rotar el patrón 3D por una elevación de delta grados.

Razonando estrictamente sobre la matriz, ¿cuál es la transformación que tendría que realizar? Lo he intentado:

  • Construir la matriz de 360 x 360 (con la "regla" mencionada anteriormente), y luego seleccionar una matriz de 181 x 360, cuyo primer elemento es el elemento delta de la matriz original.

  • Dividir la matriz de 181 x 360 en cuatro matrices de 181 x 90, que se desplazan en diferentes direcciones, y cuyos elementos faltantes (todos los datos que se desplazarían antes del primer índice o después del índice 181) se toman de los elementos "desplazados" de otras matrices (por ejemplo La matriz1 se desplaza 20 posiciones hacia arriba, por lo que las 20 posiciones de los índices finales se convierten en nulos. Matriz2 se desplaza 20 posiciones hacia abajo, por lo que Matriz1 hereda los datos "desplazados hacia abajo" de Matriz2 y Matriz2 los "desplazados hacia arriba" de Matriz1.

¿Cuál es la transformación correcta?

EDIT: Parece que aún no he encontrado el fallo de dividir la matriz en 4 columnas y rotarlas. Sin embargo, incluso si hago eso, la imagen 3D no se ve bien. ¿No estoy considerando algo aquí?

1 votos

¿Qué quiere decir con una "elevación de delta grados"? Si la transformación es una rotación, entonces también necesitas una dirección (phi = $x$ ) donde la elevación es por grados delta. En otras direcciones ( $x+180$ ) la elevación sería menos delta, en la dirección $x \pm 90$ sería cero (todo ello suponiendo que haya entendido correctamente la pregunta)

0 votos

Si quieres realizar la rotación simplemente desplazando los elementos del array, no tienes remedio. Añadiendo un incremento al acimut se realiza una rotación alrededor del eje Z. Pero la misma operación en la elevación no produce una rotación en absoluto (hace un extraño levantamiento de la superficie, dejando un casquete vacío en un polo y uno superpuesto en el otro.

0 votos

@wonko Tienes razón: busco rotar por delta grados con referencia a phi = 0°. Yves Daoust sí, tienes razón, pero después de tantas cosas que probé, valía la pena intentarlo aunque no tuviera ningún sentido.

2voto

mvw Puntos 13437

Intentemos primero encontrar un sistema de referencia común. (Normalmente lo haría en los comentarios, pero necesito una imagen aquí)

spherical coordinates - physics convention

El coordenadas esféricas utilizados en física son \begin{align} x &= r \cos \phi \sin \theta \\ y &= r \sin \phi \sin \theta \\ z &= r \cos \theta \end{align} donde $\phi \in [0, 2\pi)$ es el ángulo acimutal y $\theta\in[0,\pi)$ el ángulo polar.

¿Cómo se relacionan con sus ángulos?

Por ejemplo, ¿usas $\theta' = \pi/2 - \theta$ para $\theta' \ge 0$ como elevación?

0 votos

El sistema de referencia que muestras es exactamente el que tengo.

0 votos

Y sí, mi theta = 0° es el eje z, y phi = 0° es el eje x en su dibujo

0 votos

Creo que tienes una errata en y &= r \cos \phi \sin \theta \\ que debería decir y &= r \sin \phi \sin \theta \\

1voto

Yves Daoust Puntos 30126

Realizar una "rotación de elevación" mediante un simple desplazamiento de elementos de la matriz es imposible (mientras que una "rotación de acimut" es trivial*).

Si no tienes otra opción, tienes que recurrir al remuestreo por interpolación.

  1. calcular la matriz de rotación a partir de la dirección del eje de rotación (horizontal) y de la amplitud de rotación; se pueden utilizar las fórmulas de Rodrigues;

  2. escanear el $\phi, \theta$ puntos, convertirlos en coordenadas cartesianas y aplicar la rotación;

  3. obtener el nuevo $\phi, \theta$ ángulos en el eje no rotado convirtiendo de nuevo a coordenadas esféricas;

  4. A partir de estos ángulos, determina la baldosa en la que te encuentras (redondeando los ángulos);

  5. estimar el valor entre las cuatro esquinas de las baldosas, por interpolación bilineal (si se pide mayor precisión, piense en la bicúbica).

Es probable que los pasos 2-3 se puedan realizar directamente usando trigonometría esférica, sin convertir a coordenadas cartesianas, pero esto está muy por encima de mi cabeza.


*Si cambiar el sistema de coordenadas original es una opción, deje que Z sea el eje de rotación deseado y realice una rotación azimutal.

0 votos

La matriz de rotación sería la tono uno. Puedo hacer la transformación 2 veces, pero si tengo que interpolar también, me temo que el programa tardaría demasiado en ejecutarse...

0 votos

@Noldor130884: "Me temo que el programa tardaría demasiado tiempo en ejecutarse": tienes 65000 valores para calcular, esto es una cacería. Se hará por debajo de un milisegundo.

-1voto

Narasimham Puntos 7596

Todo el patrón en una superficie de esfera unitaria puede desplazarse a lo largo de un meridiano mediante la adición de $\delta$ para resolver $\theta$ . Podemos incluso elegir un meridiano no primo $ \alpha \ne 0$ para empezar.

EDITS

$$ x_1= \cos \theta \cos( \phi+ \alpha)$$

$$ y_1= \cos \theta \sin( \phi+ \alpha) $$

$$ z_1 = \sin \theta $$

Otra posibilidad/sugerencia:

Considere el movimiento de cuerpo rígido del objeto de superficie utilizando tres ángulos de Euler $ \phi, \theta, \psi$ con el contexto adecuado.

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