查找2D多边形的封闭点

时间:2017-07-05 23:38:28

标签: algorithm

我正在构建一个游戏,玩家每次移动1点,然后留下一条路径。他们不能跨越自己的路径,当路径完成时,我需要捕获所有封闭的点。我没有大量的数学经验来确定我需要查看的算法,但我想我需要将形状分解为子矩形,然后在每个子矩形中找到包含的点。

我被指向凸包算法,在看了一段时间之后,它似乎只是找到了一组给定点的凸周长。所以这不会奏效。

我还没有找到解决任何问题的算法,所以如果我正在寻找可以探索的算法方向,或者可能是直接解决问题的方法。

由于玩家只能向上/向下/向左/向右移动而没有对角线,因此多边形的所有顶点(?)将始终为直角。

示例平面:

   0   1   2   3   4
0 [x] [x] [x] [ ] [ ]

1 [x] [o] [x] [ ] [ ]

2 [x] [o] [x] [x] [x]

3 [x] [o] [o] [o] [x]

4 [x] [x] [x] [x] [x]

存储点:(在示例平面上标记为“x”)

[
  [0,0],
  [0,1],
  [0,2],
  [1,2],
  [2,2],
  [2,3],
  [2,4],
  [3,4],
  [4,4],
  [4,3],
  [4,2],
  [4,1],
  [4,0],
  [3,0],
  [2,0],
  [1,0]
]

目标点:(在示例平面上标记为“o”)

[
  [1,1],
  [2,1],
  [3,1],
  [3,2],
  [3,3],
]

其他示例平面:

   0   1   2   3   4
0 [ ] [x] [x] [x] [ ]

1 [ ] [x] [o] [x] [ ]

2 [x] [x] [o] [x] [x]

3 [x] [o] [o] [o] [x]

4 [x] [x] [x] [x] [x]


   0   1   2   3   4
0 [x] [x] [x] [ ] [ ]

1 [x] [o] [x] [ ] [ ]

2 [x] [x] [x] [x] [x]

3 [ ] [x] [o] [o] [x]

4 [ ] [x] [x] [x] [x]

1 个答案:

答案 0 :(得分:1)

我建议Even-Odd ray casting algorithm.

  1. 首先确定最高和最低的X& Y在用户的观点中。
  2. 对于每个Y,开始从minimumX-1扫描到maximumX + 1。
  3. 计算遇到用户点的次数。
  4. 注意:如果用户绘制水平线,则会出现一些问题,请阅读灯光以获取更多信息。