private void Approximate(int index1, int index2, KeyFunction keyFunction, int numberOfPoints)
        {
            int index0;
            int index3;

            approximation.Clear();
            if (keyFunction == KeyFunction.Spline)
            {
                index0 = index1 < 1 ? 0 : index1 - 1;
                index3 = index2 >= points.Count - 1 ? points.Count - 1 : index2 + 1;
            }
            else if (keyFunction == KeyFunction.ClosedSpline)
            {
                index0 = index1 < 1 ? points.Count - 1 : index1 - 1;
                index3 = index2 >= points.Count - 1 ? 0 : index2 + 1;
            }
            else
            {
                approximation.Add(points[index1]);
                approximation.Add(points[index2]);
                return;
            }
            approximation.Add(points[index1]);
            for (int i = 1; i < numberOfPoints - 1; ++i)
            {
                approximation.Add(
                    Mathf.CatmullRomSpline(
                        (float)i / numberOfPoints,
                        points[index0],
                        points[index1],
                        points[index2],
                        points[index3]
                        )
                    );
            }
            approximation.Add(points[index2]);
        }