Wind Vectors have a U (Eastward) and V (Northward) Component.
Below is the code in C# to calculate the resultant wind
public struct Wind { public Wind(float speed, float direction) { Speed = speed; Direction = direction; } public float Speed { get; set; } public float Direction { get; set; } } public static Wind CalculateWindSpeedAndDirection(float u, float v) { if(Math.Abs(u) < 0.001 && Math.Abs(v) < 0.001) return new Wind(0,0); const double radianToDegree = (180 / Math.PI); return new Wind( Convert.ToSingle(Math.Sqrt(Math.Pow(u, 2) + Math.Pow(v, 2))), Convert.ToSingle(Math.Atan2(u, v) * radianToDegree + 180)); }
Test Code
[TestCase(-8.748f, 7.157f, 11.303f, 129.29f)] [TestCase(-4.641f, -3.049f, 5.553f, 56.696f)] [TestCase(10f, 0f, 10f, 270f)] [TestCase(-10f, 0f, 10f, 90)] [TestCase(0f, 10f, 10f, 180f)] [TestCase(0f, -10f, 10f, 360f)] [TestCase(0f,0f,0f,0f)] [TestCase(0.001f, 0.001f, 0.0014142f, 225f)] public void CanConvertWindVectorComponents(float u, float v, float expectedWindSpeed, float expectedWindDirection) { var result = MetraWaveForecastLocationModel.CalculateWindSpeedAndDirection(u, v); Assert.AreEqual(Math.Round(expectedWindDirection,2), Math.Round(result.Direction,2)); Assert.AreEqual(Math.Round(expectedWindSpeed,2), Math.Round(result.Speed,2)); }