Skip to content

rv82/Poly

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Задача о принадлежности точки многоугольнику. Реализация алгоритма

Задание

  1. Разработать приложение, проверяющее попадание точки в полигон. Должна быть возможность задать произвольное количество точек полигона и саму контрольную точку.
  2. Алгоритм попадания точки в полигон можно и нужно искать в интернете.
  3. Будет плюсом графическое отображение полигона и контрольной точки.
  4. Приложение может быть на любой из следующих технологий: ASP.NET MVC, ASP.NET CORE. Выбирайте, что больше нравится.
  5. Плюсом будет наличие тестов проверяющих основную логику приложения.

Отчёт о проделанной работе (по пунктам)

  1. Приложение готово. Имеется возможность задавать вершины полигона и контрольные точки щелчками мыши в графической области. Количество вершин многоугольника и контрольных точек, теоретически не ограничено.
  2. Алгоритм взят отсюда.
  3. графическое отображение полигона и контрольных точек есть.
  4. Приложение построено на ASP.NET CORE.
  5. Есть тесты для тестирования алгоритма попадания точки в многоугольник.

Принцип работы приложения

После запуска приложения в браузере откроется страница с графической областью, обведённой тёмно-серым бордюром. Щёлкая мышью внутри этой области, можно установить нужное количество вершин многоугольника. Чтобы замкнуть многоугольник, необходимо нажать на кнопку "Замкнуть" над графической областью. Кнопка станет неактивной, а графическая область перейдёт в режим ввода контрольных точек. При установке каждой контрольной точки, на сервер отправляются данные, содержащие массив вершин многоугольника. координаты текущей контрольной точки и её назвние (для простоты - её номер). На сервере производится вычисление, результат которого отправляется обратно в браузер. В зависимости от результата, браузер выводит строку с сообщением, лежит ли точка внутри многоугольника, либо вне его.

Вычислениями занимается сервис IPolyService с методом InPolygon, реализация которого находится в классе PolyService. Unit-тесты написаны как раз для этого сервиса.

Примечания

Было решено реализовать графическую область с помощью svg, а не с помощью canvas, т.к. с одной стороны, в ходе работы мне приходилось сталкиваться с svg, а с другой, он имеет чёткую иерархию элементов (DOM), что значительно упрощает отладку.

Изначально я планировал организовать ввод координат точек посредством элементов input type="text", добавляемых на страницу динамически. Но в ходе обдумывания реализации решил, что "прямой ввод" мышью будет значительно более удобным.

Для работы с svg использовал библиотеку SVG.js.

Дизайн и вёрстка приложения очень примитивны, т.к. никогда не приходилось работать ни дизайнером, ни верстальщиком. Что не мешало внедрять готовую вёрстку в приложения.

About

Задача о принадлежности точки многоугольнику. Реализация алгоритма

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published