floodfill 메서드를 사용하여 몇 가지 점으로 캔버스를 만들었습니다. 서클 만 채워야하고 외부는 아무것도 채워서는 안됩니다. 그래서 나는 캔버스에 이미 표시되어있는 모든 점을 저장 한 목록을 만들었습니다. 충전 방법에서 Flood Fill Java (캔버스에서 동그라미 채우기)
private LinkedList<Point> filledpoints = new LinkedList<Point>();
지금 시작점을 overgive 싶습니다, 그리고 여기에 점을 그릴 수 경우, 또는 다음 내가 확인 싶어요 이미 점이있을 경우.
// 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);
}
I - 나는 물론 홍수 채우기 알고리즘을 봤, 그 같은 내놓았다 나도 8 개 이웃 알고리즘을 사용하려 목록에있는 점의 값을 배열에 저장하고 배열을 검사하는 등의 작업을 시도했지만 도움이되지 않았습니다. 그것은 항상 나에게 첫 번째 재귀 호출 라인이 오류 제공 : sun.java2d.SunGraphics2D.fillOval (알 수없는 소스)에서
예외 스레드에서 "AWT-EventQueue로는-0"java.lang.StackOverflowError의를
이 시점에서 내가 뭘 잘못하고 있니? 또는 다른 말로하면 : 맞나요? 전에이 오류가 발생하지 않았으며이 시점에서 혼란 스럽습니다. 그 일을하려고하는 것이 올바른 방법일까요? 어떤 힌트라도 도움이 될 것입니다. 코드 솔루션 일 필요조차 없습니다!
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
가 존재하는 경우 나 (원 내부의 첫 번째 포인트에 저장하는 배열이다 : 필요한 경우 (프로그램을 실행하기 위해 호출된다)/내 도장 방법은 다음과 같다 이 일을 더 우아한 방법, 제발 친절하고 알려 주시기 바랍니다). 이 질문에 대한 내 코드와 관련된 다른 정보가 필요하면 알려주십시오. 필요한 경우 몇 초 만에 편집하겠습니다!
좋습니다. 그러나 나는 그것을 어떻게 할 수 있습니까? for 루프 또는 이와 비슷한 것을 통해 이웃을 확인하고 있습니까? – Calimera
if (! filledpoints.contains (point)) && valid (point, width, height)와 같은 if 문을 확장 할 수 있고 유효한 메소드에서 다음과 같이 할 수 있습니다 :'return point.x> = 0 && point.y> = 0 && point.x
jbarat
정말 고마워요! – Calimera