Java 如何确定栅格单元是否位于单元的封闭周界内

Java 如何确定栅格单元是否位于单元的封闭周界内,java,javafx,tile,discrete-mathematics,game-development,Java,Javafx,Tile,Discrete Mathematics,Game Development,我一直在做一个游戏(在JavaFX中),玩家在游戏板上画一条路径,当他关闭路径时,内部的瓷砖成为他的控制区域 我看到这几乎奏效了。我在所讨论的点的右侧迭代瓷砖,并计算我输入一系列作为周界一部分的瓷砖的次数。如果它是奇数,它就在里面(计数1是一个特例) 问题在于下图中的P1点和P2点。向右计数,两个计数相同,但一个在内部,一个在封闭区域外部。我不知道如何定义这个特殊情况 任何建议或想法都是非常受欢迎的 根据第一条评论进行编辑:此示例显示了如何通过上/下和/或左/右查看两侧的点来进行确定可能不起作

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

我看到这几乎奏效了。我在所讨论的点的右侧迭代瓷砖,并计算我输入一系列作为周界一部分的瓷砖的次数。如果它是奇数,它就在里面(计数1是一个特例)

问题在于下图中的P1点和P2点。向右计数,两个计数相同,但一个在内部,一个在封闭区域外部。我不知道如何定义这个特殊情况

任何建议或想法都是非常受欢迎的

根据第一条评论进行编辑:此示例显示了如何通过上/下和/或左/右查看两侧的点来进行确定可能不起作用

< P> > P>我不考虑坐在边界细胞上的穴位。您必须定义这样一个点是在该区域的内部还是外部

算法:

  • 确定包围该区域但不与该区域共享单元格的最小矩形
    R
  • 将点
    P
    标记为
    unvisited
    ,以确定其是否在区域内或区域外
  • 如果没有标记为未访问的单元格,
    P
    位于该区域内
  • 选择标记为未访问的任意单元格
    C
    ,并将其标记为已访问的
  • 如果单元格
    C
    R
    的边界单元格,
    P
    位于区域外
  • 选择
    C
    (顶部、底部、左侧、右侧)中未标记为
    未访问的
    已访问的
    或是该区域的边界单元格的所有nighbor单元格,并将其标记为
    未访问的
  • 继续3
  • 示例1:

    在本例中,点
    p
    位于区域外。这是通过绿色渲染单元的算法的步骤
    5.
    检测到的

    示例2:

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

    示例3:


    在本例中,点
    p
    位于区域外。这可通过绿色渲染单元算法的步骤
    5.
    检测到。

    为什么不垂直检查点,即检查瓷砖是否在上方和下方。使用这种方法,您不必担心上面或下面的瓷砖数量。我编辑了我的问题,添加了一个示例,其中上/下和/或左/右查找也不太有效。谢谢你的建议。这看起来是个不错的方法,谢谢你花时间回复。它很简单,应该更有效,足以满足我的需要。谢谢,开始代码和测试吧!