public double Interpolate(double x) { var interval = PointFunctions.FindInterval(x, _points); if (interval.left is null || interval.right is null || interval.left.Equals(interval.right)) { throw new ArgumentOutOfRangeException($"Wrong interpolation point (x = {x})."); } return(interval.left.Y + (((x - interval.left.X) / (interval.right.X - interval.left.X)) * (interval.right.Y - interval.left.Y))); }
public double Interpolate(double x) { var interval = PointFunctions.FindInterval(x, _points); if (interval.Item1 is null || interval.Item2 is null || interval.Item1.Equals(interval.Item2)) { throw new ArgumentOutOfRangeException($"Wrong interpolation point (x = {x})."); } double deltaX = interval.Item2.X - interval.Item1.X; double _xt = (1.0 - Math.Cos((x - interval.Item1.X) / deltaX * Math.PI)) / 2.0; return(interval.Item1.Y * (1.0 - _xt) + interval.Item2.Y * _xt); }