JavaScript中多边形中的点命中测试(Chrome bug)

JavaScript中多边形中的点命中测试(Chrome bug),javascript,jquery,firefox,google-chrome,point-in-polygon,Javascript,Jquery,Firefox,Google Chrome,Point In Polygon,我正在开发一个用javaScript/jQuery编写的游戏。我的部分代码在平铺网格上绘制一个随机多边形(一个岛)。我需要检查点是否在多边形内 我正在使用一个多边形交点脚本,我在堆栈溢出(原始)中找到了该脚本。这在Firefox中运行良好。在Chrome中,多边形内有一些点,脚本说这些点不在多边形内 在Firefox中: 在Chrome中(岛是不同的,因为它们是随机生成的): 请查看此处的源代码,特别是pointPolygonIntersect函数: 有人知道为什么会这样吗?最初的脚本是C

我正在开发一个用javaScript/jQuery编写的游戏。我的部分代码在平铺网格上绘制一个随机多边形(一个岛)。我需要检查点是否在多边形内

我正在使用一个多边形交点脚本,我在堆栈溢出(原始)中找到了该脚本。这在Firefox中运行良好。在Chrome中,多边形内有一些点,脚本说这些点不在多边形内

在Firefox中:

在Chrome中(岛是不同的,因为它们是随机生成的):

请查看此处的源代码,特别是pointPolygonIntersect函数:


有人知道为什么会这样吗?最初的脚本是C语言的,我使用的是JavaScript版本——这会导致问题吗?

我快速查看了一下。无法跟踪应用程序流,但奇怪的是

c = !c;
代码行。如果第一次满足条件,为什么不直接将其设置为true,或者直接返回true?我假设chrome变为“true”,然后在下一次在x/y范围内时将其反转

我不熟悉Raphael或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;
}
//在这里找到了原件http://www.gamedev.net/topic/483716-point-inside-of-rectangle/
函数(x,y,l,r,b,t){//x,y是点,l,r,b,t是矩形的范围
返回x>l&&xb&&y
选择一个岛屿并坚持下去。跟踪两种浏览器中的代码,看看它们的不同之处。没有理由反对您可以轻松删除的随机性…

测试
pointPolygonIntersect()
相当简单,因此您必须在浏览器之间获得不同的数据。如果您在两个浏览器上转储数据并进行比较,可能会更容易看到。谢谢。。。这很有可能是除了跨部门交流之外的事情。我一直在试图找出数据中的差异,但到目前为止还没有发现任何差异。多边形岛不是正方形(平铺是正方形,但这不是我正在进行命中测试的内容)。作为相交测试的一部分,“c=!c”只是将c从真切换到假,反之亦然。相交测试通过检查假想线是否与多边形周长相交奇数次或偶数次来工作,这是脚本确定点是否位于多边形内部的方式。这是一个整洁的脚本,但我没有写。出于测试目的,这是明智的。谢谢,这个建议帮助我解决了这个问题。我仍然不确定到底发生了什么,但在对多边形点数组排序并删除重复值的函数中出现了差异。我已经找到了另一种方法来解决这个问题。哈哈,也许我会用这种现象在我的岛屿上创建地形块。:)