Flood Fill Java(在 canvas 中填充一个圆圈)

Flood Fill Java (filling a circle in a canvas)

我正在尝试填充一个圆圈,我在 canvas 中用一些点填充了圆圈,使用的是 floodfill 方法。只有圆圈应该被填充,外面什么都没有。所以我做了一个列表,其中我存储了所有已经在 canvas.

中标记的点
 private LinkedList<Point> filledpoints = new LinkedList<Point>();

在填充方法中,我现在想给出一个起点,然后我想检查是否可以在这里画一个点,或者那里是否已经有一个点。当然,我用谷歌搜索了 Flood Fill Algorithm,并想出了类似的东西 - 我尝试将该算法与 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.WhosebugError 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 无法绘制并抛出异常。