【问题标题】:Point in Polygon Hit Test in JavaScript (Chrome bug)点在 JavaScript 中的多边形命中测试(Chrome 错误)
【发布时间】:2011-06-29 23:43:11
【问题描述】:

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

我正在使用我在 Stack Overflow 上的 several places 中找到的多边形交叉点脚本(原始 here)。这在 Firefox 中运行良好。在 Chrome 中,脚本所说的多边形内部有一些点不在其中。

在 Firefox 中:

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

请看这里的源码,特别是pointPolygonIntersect函数: Point in Polygon Hit Test

谁能弄清楚为什么会这样?原始脚本是 C 语言,我使用的是 JavaScript 版本 - 这会导致问题吗?

【问题讨论】:

  • 测试pointPolygonIntersect() 相当简单,因此您必须在浏览器之间获取不同的数据。如果您在两个浏览器上转储数据并进行比较,可能会更容易查看。
  • 谢谢...它很可能是除了 pointPolygonIntersect 之外的东西。我一直试图找出数据中的差异,但到目前为止还没有发现任何差异。

标签: javascript jquery firefox google-chrome point-in-polygon


【解决方案1】:

选择一个岛屿并坚持下去。跟踪两个浏览器中的代码并查看它们的不同之处。没有理由与您可以轻松消除的随机性作斗争......

【讨论】:

  • 出于测试目的,这是明智的。
  • 谢谢,这个建议帮助我找出问题所在。我仍然不确定到底发生了什么,但差异发生在对多边形点数组进行排序并删除重复值的函数中。我找到了另一种不会导致此问题的方法。
  • 哈哈,也许我会利用这种现象在我的岛屿上创造出一片片地形。 :)
【解决方案2】:

我快速浏览了一下。无法跟踪应用流程,但看起来很奇怪的是

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

【讨论】:

  • 多边形岛不是正方形(图块是正方形,但这不是我要做的命中测试)。“c = !c”只是将 c 从 true 切换为 false 或反之-versa,作为交叉测试的一部分。相交测试通过检查假想线是否与多边形的周长相交奇数或偶数次来工作,这是脚本确定点是否在多边形内的方式。这是一个简洁的脚本,但不是我写的。
猜你喜欢
  • 1970-01-01
  • 2019-07-10
  • 1970-01-01
  • 2014-01-06
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
相关资源
最近更新 更多