예제 #1
0
        public async Task <ActionResult> Compute2DIntervalPlot([FromBody] Compute2DIntervalPlotRequestModel request)
        {
            var result = await _mathParserService.Compute2DIntervalPlot(request);

            if (!result.IsSuccessfulComputed)
            {
                return(StatusCode(500, new
                {
                    Message = result.ErrorMessage
                }));
            }

            return(Ok(result));
        }
        public async Task <Compute2DIntervalPlotResponseModel> Compute2DIntervalPlot(Compute2DIntervalPlotRequestModel request)
        {
            var errorMessage = MathParserServiceParametersChecker.CheckForCompute2DIntervalPlot(request);

            if (!string.IsNullOrEmpty(errorMessage))
            {
                return(new Compute2DIntervalPlotResponseModel(false, errorMessage));
            }

            var computeFunctionRequest = new ComputeFunctionRequestModel()
            {
                Expression      = request.Expression,
                ParametersTable = new List <List <Parameter> >()
            };

            for (var i = request.Min; i < request.Max; i += request.Step)
            {
                computeFunctionRequest.ParametersTable.Add(new List <Parameter>()
                {
                    new Parameter("x", i)
                });
            }

            computeFunctionRequest.ParametersTable.Add(new List <Parameter>()
            {
                new Parameter("x", request.Max)
            });

            var computeResult = await ComputeFunctionValues(computeFunctionRequest);

            if (!computeResult.IsSuccessfulComputed)
            {
                return(new Compute2DIntervalPlotResponseModel(false, computeResult.ErrorMessage));
            }

            var mappedComputeResult = computeResult
                                      .Result
                                      .Select(p => new Point2D
            {
                X = p.Parameters.First().Value,
                Y = p.Value
            })
                                      .ToList();

            return(new Compute2DIntervalPlotResponseModel(true)
            {
                Result = mappedComputeResult,
                Expression = computeResult.Expression
            });
        }