如何确定网格单元是否在单元格的封闭周边内

时间:2017-03-23 05:47:38

标签: java javafx tile discrete-mathematics game-development

我一直在玩游戏(在JavaFX中),玩家在游戏板上绘制路径,当他关闭路径时,内部瓷砖成为他的受控区域。

我看到an approach to this for polygons几乎有效。我遍历相关点右侧的瓷砖,并计算我输入一系列作为周边一部分的瓷砖的次数。如果它很奇怪,它就在里面(计数为1就是特殊情况)。

问题是下图中P1和P2点。向右计数两者将具有相同的计数,但一个在内部,一个在封闭区域之外。我无法弄清楚如何定义这种特殊情况。

任何指示或想法都非常受欢迎。

enter image description here

针对第一条评论进行了编辑:此示例显示了如何查看上方/下方和/或左/右两侧的点以进行确定可能无效。

enter image description here

1 个答案:

答案 0 :(得分:1)

我不认为坐着在边界单元格上。你必须定义这个点是否被认为是在该区域的内部或外部。

<强>算法:

  1. 确定包围该区域但与该区域不共享单元格的最小矩形R
  2. 标记点P,以确定它是否在区域内部或外部,为unvisited
  3. 如果没有标记为unvisited的单元格,则P位于该区域内。
  4. 选择标记为C的任意单元格unvisited,并将其标记为visited
  5. 如果单元格CR的边框单元格,则P位于该区域之外。
  6. 选择C(顶部,底部,左侧,右侧)未标记为unvisitedvisited的所有邻居单元格或该区域的边框单元格,并标记它们为unvisited
  7. 继续3。
  8. 示例1:

    Point outside area

    在此示例中,点P位于该区域之外。这将通过算法的步骤5.检测到以绿色呈现的单元格。

    示例2:

    Point inside area

    在此示例中,点P位于区域内。如果您继续使用其余两个未访问的单元格,则会通过算法的步骤3.检测到这一点。

    示例3:

    Point outside area

    在此示例中,点P位于该区域之外。这将通过算法的步骤5.检测到以绿色呈现的单元格。