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

发布于 2024-11-17 22:49:38 字数 994 浏览 4 评论 0原文

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

我正在使用在 几个 Stack Overflow 上的位置(原始 此处)。这在 Firefox 中运行良好。在 Chrome 中,多边形内部有一些点,脚本说这些点不在多边形内部。

在火狐中: 在此处输入图像描述

在 Chrome 中(该岛有所不同,因为它们是随机生成的): 在此处输入图像描述

请查看此处的源代码,特别是 pointPolygonIntersect 函数: 多边形中的点命中测试

任何人都可以弄清楚为什么会发生这种情况吗?原始脚本是用 C 编写的,而我使用的是 JavaScript 版本 - 这会导致问题吗?

I am working on a game written in javaScript / jQuery. Part of my code draws a random polygon (an island) on a tile grid. I need to check if a point is inside the polygon.

I am using a point-in-polygon intersection script which I found in several places on Stack Overflow (original here). This works fine in Firefox. In Chrome, there are points inside the polygon which the script says are not inside it.

In Firefox:
enter image description here

In Chrome (the island is different because they are randomly generated):
enter image description here

Please take a look at the source here, particularly the pointPolygonIntersect function:
Point in Polygon Hit Test

Can anyone figure out why this is happening? The original script is in C, and I am using a JavaScript version - could this be causing the problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

寄居人 2024-11-24 22:49:38

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

Pick an island and stick with it. Trace the code in both browsers and see where they differ. There's no reason to fight against the randomness that you can easily remove...

余厌 2024-11-24 22:49:38

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

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

I gave it a quick look. Couldn't track the app flow, but what seems strange is the

c = !c;

line of code. Why dont you just set it to true, or directly return true, if you meet the conditions the first time? I'm assuming, that chrome goes to "true" and then inverts it the next time its within the x/y bounds.

I'm not familiar with Raphael or SVG, but it seems your polygons are squares, thus you could do a simple within test

//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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文