using StructureHelperCommon.Infrastructures.Exceptions; using StructureHelperCommon.Models.Calculators; using StructureHelperCommon.Models.Shapes; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces { public class LimitCurveParameterLogic : ILimitCurveParameterLogic { private Predicate limitPredicate; public IPoint2D CurrentPoint { get; set; } public LimitCurveParameterLogic(Predicate limitPredicate) { this.limitPredicate = limitPredicate; } public double GetParameter() { var parameterCalculator = new FindParameterCalculator() { Predicate = GetFactorPredicate, }; parameterCalculator.Accuracy.IterationAccuracy = 0.001d; parameterCalculator.Run(); if (parameterCalculator.Result.IsValid == false) { throw new StructureHelperException(ErrorStrings.DataIsInCorrect + $": predicate for point (x={CurrentPoint.X}, y={CurrentPoint.Y}) is not valid"); } var result = parameterCalculator.Result as FindParameterResult; var parameter = result.Parameter; return parameter; } private bool GetFactorPredicate(double factor) { var newPoint = new Point2D() { X = CurrentPoint.X * factor, Y = CurrentPoint.Y * factor }; return limitPredicate(newPoint); } } }