gpt4 book ai didi

java - Flood Fill Java(填充 Canvas 中的圆圈)

转载 作者:行者123 更新时间:2023-12-01 20:05:45 24 4
gpt4 key购买 nike

我正在尝试使用洪水填充方法填充一个圆圈,这是我在 Canvas 上用一些点制作的。只有圆圈应该被填充,外面没有任何东西。所以我制作了一个列表,其中存储了 Canvas 中已标记的所有点。

 private LinkedList<Point> filledpoints = new LinkedList<Point>();

在填充方法中,我现在想给出一个起点,然后我想检查是否可以在此处绘制一个点,或者那里是否已经有一个点。当然,我在 google 上搜索了洪水填充算法,并想出了类似的方法 - 我尝试对 8 个邻居使用该算法:

 // checking if a dot can be drawn:
if (!filledpoints.contains(new Point(startX, startY))) {
drawDot(g,startX,startY,Color.ORANGE);
filledpoints.add(new Point(startX,startY));
floodfill(g, startX + 1, startY);
floodfill(g, startX, startY + 1);
floodfill(g, startX - 1, startY);
floodfill(g, startX, startY - 1);
floodfill(g, startX + 1, startY + 1);
floodfill(g, startX - 1, startY + 1);
floodfill(g, startX - 1, startY - 1);
floodfill(g, startX + 1, startY - 1);
}

或者只有四个邻居:

 if (!filledpoints.contains(new Point(startX, startY))) {
drawDot(g,startX,startY,Color.ORANGE);
filledpoints.add(new Point(startX,startY));
floodfill(g, startX + 1, startY);
floodfill(g, startX, startY + 1);
floodfill(g, startX - 1, startY);
floodfill(g, startX, startY - 1);
}

我还尝试过将列表中点的值存储到数组中,然后检查数组,但没有帮助。它总是在第一个递归调用行中给我这个错误:

Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError at sun.java2d.SunGraphics2D.fillOval(Unknown Source)

此时我做错了什么?或者换句话说:我是否走在正确的轨道上?我以前从未遇到过这个错误,此时我真的很困惑。我尝试这样做的方式正确吗?任何提示都会有帮助,它甚至不需要是代码解决方案! :/

如果需要的话,我的绘制方法(调用它来执行程序)看起来像这样:

 public void paint(Graphics g) {
// drawing the circle:
for (Circle c : circles) {
drawCircle(g, c.radius, c.centerX, c.centerY);
}

if (!startpoints.isEmpty()) {
for (Point p : startpoints) {
floodfill(g, p.x, p.y);
}
}

}

Startpoints 是我存储圆内第一个点的数组(如果有更优雅的方法,请友善地告诉我)。如果您需要有关此问题的代码的任何其他信息,请告诉我。如果需要的话,我会在几秒钟内编辑它!

最佳答案

您不检查边缘。 filledpoints 将包含类似 Point(-1, 0) 的点。然后 fillOval 无法绘制它并抛出异常。

关于java - Flood Fill Java(填充 Canvas 中的圆圈),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47411829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com