2017-03-23 21 views
0

我一直在研究一个游戏(在JavaFX中),玩家在游戏板上绘制一条路径,当他关闭内部图块成为他的路径时受控区域。如何确定网格单元格是否位于单元格的封闭边界

我见过,几乎可以工作。我遍历问题点右侧的图块,并计算我输入一系列属于边界的图块的次数。如果它很奇怪,它就在里面(计数1是一个特殊情况)。

问题是在下图中的P1和P2点。计数到右边都会有相同的计数,但一个在里面,一个在封闭区域之外。我无法弄清楚如何定义这个特殊情况。

任何指针或想法都是值得欢迎的。

enter image description here

响应第一个注释编辑:此示例演示如何找上/下和/或/右两侧点作出一项决定可能无法离开。

enter image description here

+0

为什么你不垂直检查点,即检查瓷砖是否出现在上方和下方。采用这种方法,您无需担心上方或下方瓷砖的数量。 – saikumarm

+1

我编辑了我的问题来添加一个示例,其中向上/向下和/或向左/向右也不会起作用。 (还是)感谢你的建议。 –

回答

1

我不考虑点上边界小区坐。你必须确定这个点是否被认为是在该区域内部或外部。

算法:

  1. 确定最小矩形R封闭区域,但与区域共享没有细胞。
  2. 标记点P,要确定它是在区域内还是区域外,如unvisited
  3. 如果没有标记为unvisited的单元格,则P位于该区域内。
  4. 选取一个任意单元格C,标记为unvisited并标记为visited
  5. 如果单元格CR的边框单元格,则P不在该区域内。
  6. 挑选C(顶部,底部,左侧,右侧)未标记为unvisitedvisited的所有邻居单元或是该区域的边界单元,并将它们标记为unvisited
  7. 继续与3.

实施例1:

Point outside area

在这个例子中点P是区域外。这通过用绿色呈现的单元的算法的步骤5.来检测。

实施例2:

Point inside area

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

实施例3:

Point outside area

在这个例子中点P是区域外。这通过用绿色呈现的单元的算法的步骤5.来检测。

+0

这看起来像一个不错的方法,谢谢你花时间回复。这很简单,应该足够满足我的需求。谢谢,关闭代码并测试! –

相关问题