Как подсказывают некоторые другие ответы , я перешел по некоторым ссылкам и нашел код c здесь .
Вот перевод JavaScript для определения, находится ли точка в многоугольнике
Copyright (c) 1970-2003, Wm. Рэндольф Франклин
Настоящим предоставляется бесплатное разрешение любому лицу, получающему копию этого программного обеспечения и связанных с ним файлов документации (далее - «Программное обеспечение»), осуществлять операции с Программным обеспечением без ограничений, включая, помимо прочего, права на использование, копирование, изменять, объединять, публиковать, распространять, сублицензировать и / или продавать копии Программного обеспечения, а также разрешать лицам, которым предоставляется Программное обеспечение, делать это при соблюдении следующих условий:
- При повторном распространении исходного кода должно сохраняться указанное выше уведомление об авторском праве, этот список условий и следующие отказы от ответственности.
- При повторном распространении в двоичной форме должно быть воспроизведено указанное выше уведомление об авторских правах в документации и / или других материалах, поставляемых при распространении.
- Имя W. Randolph Franklin не может использоваться для одобрения или продвижения продуктов, производных от данного Программного обеспечения, без специального предварительного письменного разрешения.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЯ ГАРАНТИЙ ТОВАРНОГО ОБЕСПЕЧЕНИЯ, ПРИГОДНОСТИ ДЛЯ ОСОБЫХ ЦЕЛЕЙ И НЕЗАКРЕПЛЕНИЙ. Ни при каких обстоятельствах авторы или держатели авторских прав не несут ответственности за любые претензии, ущерб или другую ответственность, возникающие в результате действия контракта, деликтного или иного действия, возникающие в результате, в результате или в связи с программным обеспечением или использованием в другом месте. ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ.
function pnpoly( nvert, vertx, verty, testx, testy ) {
var i, j, c = false;
for( i = 0, j = nvert-1; i < nvert; j = i++ ) {
if( ( ( verty[i] > testy ) != ( verty[j] > testy ) ) &&
( testx < ( vertx[j] - vertx[i] ) * ( testy - verty[i] ) / ( verty[j] - verty[i] ) + vertx[i] ) ) {
c = !c;
}
}
return c;
}
nvert - Количество вершин в многоугольнике. Повторять ли первую вершину в конце, обсуждается ниже.
vertx, verty - Массивы, содержащие x- и y-координаты вершин многоугольника.
testx, testy - X- и y-координата контрольной точки.