SkillAgentSearch skills...

Funcan

Math function visualizer and analyzer on ASP.NET Core

Install / Use

/learn @artemsuvorov/Funcan
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

Funcan

Funcan -- это RESTful API web-приложение, разработанное с помощью фреймворка ASP.NET и предназначенное для визуализации графиков функций и отображения особенностей функции на графике. Данное web-приложение запускается и разворачивается как сервер, с которым можно взаимодействовать не только напрямую посредством HTTP запросов, но и с помощью .html страницы в браузере.

Проблематика

При решении математических задач может возникнуть потребность посмотреть, как выглядит график функции в той или иной области, и/или рассмотреть некоторые особенности на этом графике, например: отобразить точки экстремума функции, чтобы наглядно убедиться в том, что они были найдены студентом верно.

Использование

Funcan -- это практический целый инструмент, который можно использовать в образовательных целях. Он не только умеет визуалировать и анализровать функции, но и вести историю введенных пользователем функций для его удобства.

Использование RESTful API web-приложения происходит посредством отправки HTTP запросов. Актуальный список всех HTTP запросов, которые поддерживает сервер, с их описанием и примерами можно получить по запросу GET /swagger. Здесь мы приведем основные из них: | Запрос | Описание | |:--------|:------------| | GET /Input | Получить клиентскую .html страницу (страница осуществляет все запросы ниже сама) | | POST /Function | Получить список графиков для переданной функции (параметры описаны ниже) |

POST /Function -- ключевой запрос в логике взаимодействия пользователя с сервером, и он содержит несколько настраиваемых параметров: | Параметр | Тип | Обязателен | Описание | |:--------|:--------|:--------|:------------| | input | query | да | Функция, передаваемая как string, график которой мы хотим построить и/или проанализровать | | from | query | нет | Начало отрезка значений x, на котором будет строится график функции (по умолчанию from=-10.0) | | to | query | нет | Конец отрезка значений x, на котором будет строится график функции (по умолчанию from=10.0) | | analysis | body | да | Список наименований построителей графиков в формате json, которые будут строить графики (список может быть пустым) |

Приведем пример построения графика функции $$y = \dfrac{1}{x}$$ на отрезке $$[-5;5]$$ и отображения точек разрыва на нем (некоторые заголовки запроса опущены для краткости):

POST /Function?input=1/x&from=-5&to=5 HTTP/1.1
Content-Type: application/json

[ "function", "discontinuities" ]

Архитектура

Приложение построено согласно принципам DDD, в связи с чем архитектура проекта разделяется на несколько слоев: Application и Domain. В Application слое содержится пользовательская логика взаимодействия с доменом приложения посредством HTTP запросов. В слое Domain, по сути, содержится вся бизнес-логика проекта: используемые модели, сервисы простроения графиков функций, хранящий историю введенных функций репозиторий.

Ключевыми в домене являются абстракции графика функции (plot) и построителя графиков функций (plotter). Plot -- это плоская модель, которая представляет собой просто список точек (x,y). Plotter'ы занимаются построением тех или иных plot'ов по переданной функции, например: FunctionPlotter -- строит plot, в который входят все точки функции на выбранном отрезке, а ExtremaPlotter -- строит plot, в который входят лишь точки экстремума функции на выбранном отрезке.

Контроллеры из слоя Application позволяют вызывать сразу несколько plotter'ов, чтобы на выходе получить целый список графиков: график самой функции и/или графики ее особенностей.

Точки расширения

Проект поддерживает одну точку расширения, а именно расширение списка поддерживаемых приложением построителей графиков (plotter'ов).

Чтобы добавить новый plotter, который бы, например, строил график периода функции, достаточно всего лишь написать новый класс PeriodicPlotter, реализующий интерфес IPlotter, и зарегистрировать его в DI-контейнере в файле Startup.cs. В результате plotter периода функции автоматически добавится в отображаемый на клиентской странице список поддерживаемых особенностей графика, и им уже можно будет пользоваться, передавая его в POST /Function запрос.

View on GitHub
GitHub Stars5
CategoryDevelopment
Updated3y ago
Forks2

Languages

C#

Security Score

70/100

Audited on Mar 29, 2023

No findings