private double GetK(PiecewiseLinearApproximationData approximationData)
        {
            // k = (f1 - f0)/(x1 - x0);
            double k = (approximationData.YForNextExistingX - approximationData.YForPreviousExistingX) /
                       (approximationData.NextExistingX - approximationData.PreviousExistingX);

            return(k);
        }
        private double CalculateY(PiecewiseLinearApproximationData approximationData, LinearFunctionParameters linearFunctionParameters)
        {
            // y = k * x+ b
            linearFunctionParameters.K = GetK(approximationData);
            linearFunctionParameters.B = GetB(approximationData.YForPreviousExistingX, linearFunctionParameters.K, approximationData.PreviousExistingX);
            double y = linearFunctionParameters.K * linearFunctionParameters.X + linearFunctionParameters.B;

            return(y);
        }
        public double GetY(double x)
        {
            PiecewiseLinearApproximationData approximationData        = GetApproximationData(x);
            LinearFunctionParameters         linearFunctionParameters = new LinearFunctionParameters();

            linearFunctionParameters.X = x;
            double y = CalculateY(approximationData, linearFunctionParameters);

            return(y);
        }