//необходима оптимизация
        public void CreateSchedule(string curFunc)
        {
            CurrentFunction = ConvertInputText(curFunc);
            if (CurrentFunction == null)
            {
                mainChart.Series[2].Points.Clear();
                return;
            }

            if (mainChart.Series[2].Points.Count != 0)
            {
                mainChart.Series[2].Points.Clear();
            }
            double min = CurrentFunction.Contains("log") || CurrentFunction.Contains("log10") ?
                         mainChart.ChartAreas[0].AxisX.Minimum * -0.0001 : mainChart.ChartAreas[0].AxisX.Minimum;
            double max = min < 0 ? min + mainChart.ChartAreas[0].AxisX.Maximum * 2 : mainChart.ChartAreas[0].AxisX.Maximum;

            if (CurrentFunction.Contains("1/tan"))
            {
                for (double i = min; i < 10; i += 0.01)
                {
                    mainChart.Series[2].Points.AddXY(Math.Round(i, 2), CalculateByPoint(i));
                }
                //производная графика ctg(x) являтся график -1/(sin(x))^2
                //шаг на графике PI, начиная с PI
                NormalizeCtg(min, max);
                CurrentFunction = CurrentFunction.Replace("1/tan", "ctg");
                if (CurrentFunction.Contains("tan"))
                {
                    CurrentFunction = CurrentFunction.Replace("ctg", "1/tan");
                    NormalizeTg(min, max);
                }
                return;
            }
            if (CurrentFunction.Contains("tan"))
            {
                //CurrentFunction = CurrentFunction.Replace("ctg", "1/tan");
                for (double i = min; i < max; i += 0.01)
                {
                    mainChart.Series[2].Points.AddXY(Math.Round(i, 2), Math.Round(CalculateByPoint(i), 6));
                }
                //производная графика tg(x) являтся график 1/(cos(x))^2
                //шаг на графике PI, начиная с PI/2
                NormalizeTg(min, max);
                return;
            }
            if (mainChart.Series[2].Points.Count == 0)
            {
                for (double i = min; i < max; i += 0.05)
                {
                    double y = CalculateByPoint(i);
                    mainChart.Series[2].Points.AddXY(i, y > 1000 ? 1000 : y);
                    if (double.IsNaN(y) || double.IsInfinity(y))
                    {
                        mainChart.Series[2].Points[mainChart.Series[2].Points.Count - 1].IsEmpty = true;
                    }
                }
            }
        }