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 }); }