Клуб API Карт

5 комментариев
Александр Новиков
28 января 2016, 07:47
Если знаете координаты вершин и координату точки - то это стандартная алгоритмическая задача. Стандартного АПИ для подобной задачи кажется нет.
Стандартного метода в API нет, однако, это несложно сделать самостоятельно.
Вот пример: http://api.yandex.ru/maps/jsapi/examples/circle.html
у гугла был пример определения принадлежности точки многоугольника.
в примере что скинул Саша это функция
 // Алгоритм взят с ru.wikipedia.org: http://ru.wikipedia.org/wiki/Алгоритм_точки_в_многоугольнике
        function inPolygon (polygon, point) {
Суть проста - идем слева направо до нашей точки и считаем сколько раз мы пересекли границу полигона.
Если четное - мы за пределами полигона.
Если нечетное - значит внутри
Боюсь, что этот метод будет давать не всегда точный результат. Если вдруг на пути до точки попадется вершина, то результат будет неверный. Необходимо будет еще проверять каждую точку на экстремум.
но это почти что единсвенный быстрый алгоритм, который будет работать для произвольного полигона.
Ибо все мозги математиков сосредоточились на convex hull :(

как вариант решения проблемы - можно перед тестом увеличить полигон на один пиксель, градус или палец.
Точнее увеличить один раз, после отображения, да и хранить у себя в малек увеличенном виде.

Как увеличить?
Идем по полигону, считаем нормали, сдвигаем точку на суммы нормалей соседних граней, хотя в итоге, кривой поли может прорасти сам в себя