2

所以我正在做一个介绍 Java 课程的项目,似乎我选择了一些超出我能力范围的东西。:P
任何帮助将不胜感激。这就是我遇到的问题:

您有一个由玩家控制的光标(向前或转动 90°),它会留下一条彩色线。如果您设法越过自己的线并关闭任何形状的多边形(尽管只有直角),它的表面会将颜色变为您的线的颜色。

我可以检测到这种情况何时出现,但我有点迷失了如何实际填充刚刚关闭的正确多边形。我似乎无法想象一种算法可以涵盖任何可能的情况。

我查看了扫描线填充算法,但我认为当地图中已经填充了一些多边形时,它就会开始出现问题。如果我有办法在多边形内找到一个点,Floodfill算法将是完美的,但是,由于有许多不同的可能性,我想不出一个通用的规则。

我正在使用一个 2x2 整数数组,其中每种颜色都由一个数字表示。

有谁知道如何解决这个问题?

4

2 回答 2

1

如果您可以检测到这种情况,那么这可以通过非常简单的方式解决。问题是选择哪个点作为洪水填充的起点。简单的答案是:尝试所有这些。当然,仅从与光标所在位置相邻的点开始是有意义的。在这种情况下,您最多需要检查 8 个点。更好的是——如果当前点形成一个多边形,其中至少有 2 个肯定已经画好了。

所以你有8个点要检查。从这些点中的每一个开始启动洪水填充 8 次。

您可能应该记住两件事:

  1. 您应该尝试在您的字段的克隆版本中填充该区域,以便在 Floodfill 找不到多边形时能够返回。

  2. 第二次和以后启动floodfill,您应该重复使用这个克隆版本的字段,看看它是否在那里被填充。这将允许您最多检查每个点一次,这将使您的 8 个 Floodfill 几乎与 1 个 Floodfill 一样快。

于 2013-03-20T13:55:28.360 回答
0

检查这个问题,使用 Graphics2 和 Polygon 填充任意多边形:java swing : Polygon fill color problem

找出一个点是在多边形内部还是外部:http ://en.wikipedia.org/wiki/Point_in_polygon

确保使用双缓冲。如果您设置单个像素并且不使用双缓冲,则组件可能会在设置每个像素后重绘。

于 2013-03-20T14:19:16.703 回答