public static void DoFilterBulgeAndСoncavity(this TableFunction tableFunction) { int length = tableFunction.CoefficientA.Length; double lastXStart = tableFunction.X[0]; Func <double, double> func = x => (tableFunction.CoefficientD[0] * 6 * x + tableFunction.CoefficientC[0] * 2); BulgeAndСoncavity lastBulgeAndСoncavity = CheckBulgeAndСoncavity(tableFunction.Y[0]); if (lastBulgeAndСoncavity == BulgeAndСoncavity.inflection) { lastBulgeAndСoncavity = CheckBulgeAndСoncavity(tableFunction.X[0] + (tableFunction.X[1] - tableFunction.X[0]) / cut); } BulgeAndСoncavity bulgeAndСoncavity = lastBulgeAndСoncavity; for (int i = 1; i < length; i++) { double delta = (tableFunction.X[i] - tableFunction.X[i - 1]) / cut; for (int j = i; j < 10; j++) { bulgeAndСoncavity = CheckBulgeAndСoncavity(func(tableFunction.X[j - 1] + j * delta)); if (lastBulgeAndСoncavity == bulgeAndСoncavity) { continue; } else { tableFunction.cutsBulgeAndСoncavity.Add(new CutBugleAndConcavity(lastXStart, tableFunction.X[j - 1] + j * delta / 2, lastBulgeAndСoncavity)); lastBulgeAndСoncavity = bulgeAndСoncavity; lastXStart = tableFunction.X[j - 1] + j * delta / 2; } } func = x => (tableFunction.CoefficientD[i] * 6 * x + tableFunction.CoefficientC[i] * 2); } tableFunction.cutsBulgeAndСoncavity.Add(new CutBugleAndConcavity(lastXStart, tableFunction.X[length], lastBulgeAndСoncavity)); }
public CutBugleAndConcavity(double xStart, double xEnd, BulgeAndСoncavity bulgeAndСoncavity) { this.xStart = xStart; this.xEnd = xEnd; this.bulgeAndСoncavity = bulgeAndСoncavity; }