private static List <Point3D> GetPointsOfCriticalArea(DACEmulator emulator, DACEmulator.Delta minMaxDeltaParameter, DACEmulator.Delta changingDeltaParameter, double minMaxDeltaParameterStep = 1, double changingDeltaParameterStep = 1, double accuracy = 0.0001) { List <Point3D> area = new List <Point3D>(); double deltaMin = TestingDelta(emulator.N, emulator.Coeff, minMaxDeltaParameter, -minMaxDeltaParameterStep, accuracy, emulator.DeltaCoeff, emulator.DeltaIndex, emulator.DeltaSM, true).GetDeltaParameter(minMaxDeltaParameter); double deltaMax = TestingDelta(emulator.N, emulator.Coeff, minMaxDeltaParameter, minMaxDeltaParameterStep, accuracy, emulator.DeltaCoeff, emulator.DeltaIndex, emulator.DeltaSM, true).GetDeltaParameter(minMaxDeltaParameter); double step = (deltaMax - deltaMin) / (minMaxDeltaParameterStep - 1); double i = deltaMin; for (int j = 0; j < minMaxDeltaParameterStep; j++) { emulator.SetDeltaParameter(minMaxDeltaParameter, i); double deltaStepWithAccuracy = changingDeltaParameterStep; while (Math.Abs(deltaStepWithAccuracy) * 2 > accuracy) { bool needCorrecting = false; while (ErrorChecking(emulator)) { emulator.AddDeltaParameter(changingDeltaParameter, deltaStepWithAccuracy); needCorrecting = true; } if (needCorrecting) { emulator.AddDeltaParameter(changingDeltaParameter, -deltaStepWithAccuracy); } deltaStepWithAccuracy /= 2; } area.Add(new Point3D((float)emulator.GetDeltaParameter(DACEmulator.Delta.Coeff), (float)emulator.GetDeltaParameter(DACEmulator.Delta.SM), (float)emulator.GetDeltaParameter(DACEmulator.Delta.Index))); emulator.SetDeltaParameter(changingDeltaParameter, 0); i += step; } return(area); }
private static List <Point3D> GetPointsOfCriticalArea(DACEmulator emulator, DACEmulator.Delta minMaxDeltaParameter, DACEmulator.Delta changingDeltaParameter, double minMaxDeltaParameterStep = 1, double changingDeltaParameterStep = 1) { double accuracy = 0.0001; List <Point3D> area = new List <Point3D>(); double deltaMin = TestingDelta(emulator.N, emulator.Coeff, minMaxDeltaParameter, -minMaxDeltaParameterStep, accuracy, emulator.DeltaCoeff, emulator.DeltaIndex, emulator.DeltaSM).GetDeltaParameter(minMaxDeltaParameter); double deltaMax = TestingDelta(emulator.N, emulator.Coeff, minMaxDeltaParameter, minMaxDeltaParameterStep, accuracy, emulator.DeltaCoeff, emulator.DeltaIndex, emulator.DeltaSM).GetDeltaParameter(minMaxDeltaParameter); minMaxDeltaParameterStep = (deltaMax - deltaMin) / minMaxDeltaParameterStep; for (double i = deltaMin; i <= deltaMax; i += minMaxDeltaParameterStep) { emulator.SetDeltaParameter(minMaxDeltaParameter, i); while (ErrorChecking(emulator)) { emulator.AddDeltaParameter(changingDeltaParameter, changingDeltaParameterStep); } area.Add(new Point3D((float)emulator.GetDeltaParameter(DACEmulator.Delta.Coeff), (float)emulator.GetDeltaParameter(DACEmulator.Delta.SM), (float)emulator.GetDeltaParameter(DACEmulator.Delta.Index))); emulator.SetDeltaParameter(changingDeltaParameter, 0); } return(area); }