using MathNet.Spatial.Euclidean;
using MathNet.Spatial.Units;
using MathNet.Numerics.LinearAlgebra;
Matrix<double> RotateTo(Vector2D v) => Matrix2D.Create(v.X, v.Y, -v.Y, v.X);
Matrix<double> Scale(double xScale, double yScale) => Matrix<double>.Build.DenseOfDiagonalArray(2, 2, new [] {xScale, yScale});
var bearing = Angle.FromDegrees(0);
Vector2D vBearing = Vector2D.FromPolar(1, bearing);
var windDir = Angle.FromDegrees(0);
Vector2D wind = Vector2D.FromPolar(windSpeed, windDir);
bool isTailWind = vBearing.DotProduct(wind) > 0;
.TransformBy(RotateTo(vBearing))
.TransformBy(Scale(1.05, 1))
.TransformBy(RotateTo(vBearing).Inverse());
Console.WriteLine(newWind);