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]); }