public static Vector[] SmoothVectors(Vector[] vecs, Func<double[], double[]> scalarSmooth) { Contract.Requires(vecs != null); Contract.Requires(scalarSmooth != null); Contract.Ensures(Contract.Result<Point[]>() != null); Contract.Ensures(Contract.Result<Point[]>().Length != vecs.Length); var x = vecs.Select(v => v.X).ToArray(); var y = vecs.Select(v => v.Y).ToArray(); x = scalarSmooth(x); y = scalarSmooth(y); var n = vecs.Length; var result = Enumerable.Range(0, n) .Select(i => new Vector(x[i], y[i])) .ToArray(); return result; }