Saltar al contenido

Cómo calcular la dirección del viento a partir de componentes de viento U y V en R

Te sugerimos que revises esta solución en un entorno controlado antes de pasarlo a producción, un saludo.

Solución:

Hay tres problemas con esto:

  1. No se puede convertir m/s a radianes. Para introducir componentes de viento en atan2, debe normalizarlos, pero no lo hace multiplicando m/s por pi/180 (que hiciste para conseguir u_rad y v_rad). Debes hacer una columna de la velocidad del viento absoluta (sqrt(u_ms^2 + v_ms^2)) y tomar atan2(u_ms/wind_abs, v_ms/wind_abs). (también tenga en cuenta que atan2 toma el componente y primero; asegúrese de que eso es lo que desea)
  2. atan2 le dará una respuesta en las coordenadas del círculo unitario, que aumentan en sentido antihorario y tienen un cero en el eje x. Desea una respuesta en coordenadas cardinales que aumentan en el sentido de las agujas del reloj y tienen un cero en el eje y. Para convertir el círculo unitario en coordenadas cardinales, debe restar el ángulo del círculo unitario de 90.
  3. Debe saber si la información del viento se refiere a la dirección de la que proviene el viento (estándar para coordenadas cardinales) o la dirección en la que sopla el viento (estándar para operaciones trigonométricas/vectoriales)

si te dan u_ms = = -3.711 y v_ms = -1.471 (en el círculo unitario sopla hacia abajo y ligeramente hacia la izquierda, por lo que viene del noreste), luego:

wind_abs = sqrt(u_ms^2 + v_ms^2)
wind_dir_trig_to = atan2(u_ms/wind_abs, v_ms/wind_abs) 
wind_dir_trig_to_degrees = wind_dir_trig_to * 180/pi ## -111.6 degrees

Luego debes convertir este vector de viento a la convención meteorológica de la dirección de donde viene el viento:

wind_dir_trig_from_degrees = wind_dir_trig_to_degrees + 180 ## 68.38 degrees

Luego debe convertir ese ángulo de coordenadas “trigonométricas” a coordenadas cardinales:

wind_dir_cardinal = 90 - wind_dir_trig_from_degrees
[1] 21.62284 #From the northeast.

Si bien la respuesta aceptada tiene la idea correcta, tiene un defecto. Como se menciona en los comentarios, no es necesario normalizar el componente u y v para usar atan2 en ellos. El defecto viene cuando u == v == 0 y wind_abs se convierte en 0. En C#, las dos divisiones devolverán infinito (de conformidad con IEEE 754) y atan2 devolverá NaN. Cuando no se normalizan los componentes atan2(0,0) felizmente regresa 0. Por lo tanto, no solo no es necesario normalizar, sino que también introduce un error.

Tenga en cuenta también que la firma de función más común de atan2 es atan2(y, x) — Microsoft Excel es una excepción.

En Python:

Dir=np.mod(180+np.rad2deg(np.arctan2(U, V)),360)

Esto conduce a un viento del Sur (180 grados) para un [0,1] vector, un viento del Norte (0 grados) para un [0,-1] vector, un viento del Sudoeste (225 grados) para un [1,1] vector:

U
Out[86]: 
array([[ 0.  ],
       [ 0.  ],
       [ 1.  ],
       [-3.47]])

V
Out[87]: 
array([[ 1.  ],
       [-1.  ],
       [ 1.  ],
       [-1.47]])

np.mod(180+np.rad2deg(np.arctan2(U, V)),360)
Out[89]: 
array([[180.        ],
       [  0.        ],
       [225.        ],
       [ 67.04097233]])

Puntuaciones y reseñas

Tienes la opción de corroborar nuestra tarea ejecutando un comentario o dejando una valoración te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *