Точка в тесте попадания полигона в JavaScript (ошибка Chrome) - PullRequest
4 голосов
/ 30 июня 2011

Я работаю над игрой, написанной на javaScript / jQuery. Часть моего кода рисует случайный многоугольник (остров) на сетке тайлов. Мне нужно проверить, находится ли точка внутри многоугольника.

Я использую скрипт пересечения точки в многоугольнике, который я нашел в нескольких местах в переполнении стека (оригинал здесь ). Это отлично работает в Firefox. В Chrome внутри многоугольника есть точки, которые, как говорит сценарий, не находятся внутри него.

В Firefox: enter image description here

В Chrome (остров отличается тем, что он генерируется случайным образом): enter image description here

Пожалуйста, посмотрите на источник здесь, в частности на функцию pointPolygonIntersect: Точка в тесте попадания полигона

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

Ответы [ 2 ]

2 голосов
/ 30 июня 2011

Выберите остров и придерживайтесь его.Проследите код в обоих браузерах и посмотрите, чем они отличаются.Нет причин бороться со случайностью, которую вы легко можете убрать ...

0 голосов
/ 30 июня 2011

Я быстро взглянул на него.Не удалось отследить поток приложения, но то, что кажется странным, это строка кода

c = !c;

.Почему бы вам просто не установить значение true или напрямую вернуть true, если вы выполняете условия в первый раз?Я предполагаю, что хром переходит в «true», а затем инвертирует его в следующий раз, когда он находится в пределах x / y.

Я не знаком с Рафаэлем или SVG, но кажется, что ваши полигоны являются квадратамиТаким образом, вы можете сделать простой в тесте

//original found here http://www.gamedev.net/topic/483716-point-inside-of-rectangle/
function inside( x, y, l, r, b, t ){ //x,y are the point, l,r,b,t are the extents of the rectangle
    return x > l && x < r && y > b && y < t;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...