/// <summary>
        /// Calculate y=y(x) for arbitrary x. Works fine only for line series with ordered x values.
        /// </summary>
        /// <param name="series"></param>
        /// <param name="firstindex"></param>
        /// <param name="lastindex"></param>
        /// <param name="xvalue"></param>
        /// <returns>y=y(xvalue) where xvalue is arbitrary x value.</returns>
        private double InterpolateLineSeries(TeeChart.Styles.Custom series, int firstindex, int lastindex, double xvalue)
        {
            int index;

            for (index = firstindex; index <= lastindex; index++)
            {
                if (index == -1 || series.XValues.Value[index] > xvalue)
                {
                    break;
                }
            }
            // safeguard
            if (index < 1)
            {
                index = 1;
            }
            else if (index >= series.Count)
            {
                index = series.Count - 1;
            }
            // y=(y2-y1)/(x2-x1)*(x-x1)+y1
            double dx = series.XValues[index] - series.XValues[index - 1];
            double dy = series.YValues[index] - series.YValues[index - 1];

            if (dx != 0.0)
            {
                return(dy * (xvalue - series.XValues[index - 1]) / dx + series.YValues[index - 1]);
            }
            else
            {
                return(0.0);
            }
        }
 private double InterpolateLineSeries(TeeChart.Styles.Custom series, double xvalue)
 {
     return(InterpolateLineSeries(series, series.FirstVisibleIndex, series.LastVisibleIndex, xvalue));
 }