//необходима оптимизация 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; } } } }