Coder Social home page Coder Social logo

funcan's Introduction

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 запрос.

funcan's People

Contributors

arista213 avatar artemsuvorov avatar newilluminat avatar wintrnite avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

funcan's Issues

Task #3

  1. FunctionController вместо строки должен возвращать ActionResult

  2. обработка ошибок в эндпоинтах

  3. переименовать все классы, сервисы, методы, аргументы методов (solver в plotter в т.ч)

  4. научить function controller принимать строчку функции + диапазон откуда брать значения (IFuncSolver тоже должен это понимать)

  5. добавим для каждой особенности на графике отдельный end point, возвращающий ActionResult. если такой PointSet построить не удалось, возвращает например bad request

  6. добавить особенности на графике
    а) экстремумы
    б) точки перегиба
    в) монотонность
    г) асимптоты
    д) точки разрыва

  7. добавить историю функций, научиться сохранять ее в словарик по id пользователя, который сохраняется в куки браузера

  8. endpoint для get запроса истории функций

  9. function controller дополнительно добавляет введенную функцию в список истории функций

  10. добавить юнит тесты

Фронт
11. добавить чекбоксы под особенности на графике, добавить поля ввода диапазона графика ф-ции, научиться принимать от сервера PointSet'ы
12. добавить отображение для истории функций

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.