相关疑难解决方法(0)

如何确定2D点是否在多边形内?

我正在尝试在多边形算法中创建一个快速 2D点,用于命中测试(例如Polygon.contains(p:Point)).对于有效技术的建议将不胜感激.

graphics performance polygon collision-detection point-in-polygon

473
推荐指数
15
解决办法
26万
查看次数

点多边形算法

我看到下面的算法用于检查点是否在此链接的给定多边形中:

int pnpoly(int nvert, float *vertx, float *verty, float testx, float testy)
{
  int i, j, c = 0;
  for (i = 0, j = nvert-1; i < nvert; j = i++) {
    if ( ((verty[i]>testy) != (verty[j]>testy)) &&
     (testx < (vertx[j]-vertx[i]) * (testy-verty[i]) / (verty[j]-verty[i]) + vertx[i]) )
       c = !c;
  }
  return c;
}
Run Code Online (Sandbox Code Playgroud)

我试过这个算法,它实际上工作得很完美.但遗憾的是,在花了一些时间试图了解它之后,我无法理解它.

因此,如果有人能够理解这个算法,请向我解释一下.

谢谢.

c algorithm

58
推荐指数
4
解决办法
9万
查看次数

鼠标位置到等高的瓷砖,包括高度

Struggeling将鼠标的位置转换为网格中tile的位置.当它完全平坦时,数学看起来像这样:

this.position.x = Math.floor(((pos.y - 240) / 24) + ((pos.x - 320) / 48));
this.position.y = Math.floor(((pos.y - 240) / 24) - ((pos.x - 320) / 48));
Run Code Online (Sandbox Code Playgroud)

其中pos.xpos.y是鼠标的位置,240和320是贴片的大小,24和48是贴片的大小.然后,位置包含我正在悬停的图块的网格坐标.这在平坦表面上工作得相当好.

http://i.stack.imgur.com/gp7qU.png

现在我正在增加高度,数学没有考虑到.

http://i.stack.imgur.com/jWGMf.png

此网格是包含噪声的2D网格,正在转换为高度和平铺类型.高度实际上只是对瓷砖"Y"位置的调整,因此可以在同一位置绘制两个瓷砖.

我不知道如何确定我在哪个瓷砖上空盘旋.

编辑:

取得了一些进展...之前,我依靠鼠标悬停事件来计算网格位置.我只是将其更改为在绘制循环本身中进行计算,并检查坐标是否在当前绘制的图块的限制范围内.创造了一些头顶的东西,不确定我是否对它非常满意,但我会确认它是否有效.

编辑2018:

我没有答案,但既然这是[sd]开放的赏金,请自己修改一些代码和演示

网格本身是简化的;

let grid = [[10,15],[12,23]];
Run Code Online (Sandbox Code Playgroud)

这导致如下绘图:

for (var i = 0; i < grid.length; i++) {
    for (var j = 0; j < grid[0].length; j++) {
        let x = (j - i) * resourceWidth;
        let y = ((i + j) …
Run Code Online (Sandbox Code Playgroud)

javascript mouse canvas noise isometric

26
推荐指数
3
解决办法
3786
查看次数