4 votes

Test de collision entre un point et un polygone en JavaScript (bug de Chrome)

Je travaille sur un jeu écrit en javaScript / jQuery. Une partie de mon code dessine un polygone aléatoire (une île) sur une grille de carreaux. J'ai besoin de vérifier si un point se trouve à l'intérieur du polygone.

J'utilise une intersection point-in-polygone script que j'ai trouvé dans plusieurs places sur Stack Overflow (original ici ). Cela fonctionne bien dans Firefox. Dans Chrome, il y a des points à l'intérieur du polygone qui, selon le script, ne sont pas à l'intérieur.

Dans Firefox : enter image description here

Dans Chrome (l'île est différente car elle est générée de manière aléatoire) : enter image description here

Jetez un coup d'œil à la source ici, en particulier à la fonction pointPolygonIntersect : Test d'impact sur un point dans un polygone

Quelqu'un peut-il comprendre pourquoi cela se produit ? Le script original est en C, et j'utilise une version JavaScript - cela pourrait-il être la cause du problème ?

2voto

Jonathan Points 994

Choisissez une île et restez-y. Tracez le code dans les deux navigateurs et voyez où ils diffèrent. Il n'y a aucune raison de lutter contre le caractère aléatoire que vous pouvez facilement supprimer...

0voto

japrescott Points 1944

J'ai jeté un coup d'oeil rapide. Je n'ai pas pu suivre le flux de l'application, mais ce qui semble étrange c'est le

c = !c;

ligne de code. Pourquoi ne pas simplement le mettre à true, ou retourner directement true, si vous remplissez les conditions la première fois ? Je suppose que le chrome se met à "true" et l'inverse la prochaine fois qu'il se trouve dans les limites x/y.

Je ne suis pas familier avec Raphael ou SVG, mais il semble que vos polygones soient des carrés, donc vous pourriez faire un simple test within

//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;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X