我一直在玩游戏(在JavaFX中),玩家在游戏板上绘制路径,当他关闭路径时,内部瓷砖成为他的受控区域。
我看到an approach to this for polygons几乎有效。我遍历相关点右侧的瓷砖,并计算我输入一系列作为周边一部分的瓷砖的次数。如果它很奇怪,它就在里面(计数为1就是特殊情况)。
问题是下图中P1和P2点。向右计数两者将具有相同的计数,但一个在内部,一个在封闭区域之外。我无法弄清楚如何定义这种特殊情况。
任何指示或想法都非常受欢迎。
针对第一条评论进行了编辑:此示例显示了如何查看上方/下方和/或左/右两侧的点以进行确定可能无效。
答案 0 :(得分:1)
我不认为坐着在边界单元格上。你必须定义这个点是否被认为是在该区域的内部或外部。
<强>算法:强>
R
。P
,以确定它是否在区域内部或外部,为unvisited
。unvisited
的单元格,则P
位于该区域内。C
的任意单元格unvisited
,并将其标记为visited
。C
是R
的边框单元格,则P
位于该区域之外。C
(顶部,底部,左侧,右侧)未标记为unvisited
或visited
的所有邻居单元格或该区域的边框单元格,并标记它们为unvisited
。示例1:
在此示例中,点P
位于该区域之外。这将通过算法的步骤5.
检测到以绿色呈现的单元格。
示例2:
在此示例中,点P
位于区域内。如果您继续使用其余两个未访问的单元格,则会通过算法的步骤3.
检测到这一点。
示例3:
在此示例中,点P
位于该区域之外。这将通过算法的步骤5.
检测到以绿色呈现的单元格。