중점 알고리즘으로 채워진 원을 그리려고합니다. 저는 이미 y0 = 320 인 채워지지 않은 원을 그렸습니다. x0 = 240; 반경 = 다음 코드를 가진 - 180 (참조 : https://en.wikipedia.org/wiki/Midpoint_circle_algorithm), 가 c-> infinite-loop?에서 중점 알고리즘으로 그려진 원을 채 웁니다.
이제 I 원하는이 잔여 노란색 원 그 :
int x0, int y0, int radius;
x0 = 320; //assign values
y0 = 240;
radius = 180;
int x = radius-1;
int y = 0;
int dx = 1;
int dy = 1;
int err = dx - (radius << 1);
while (x >= y)
{
putpixel(x0 + x, y0 + y);
putpixel(x0 + y, y0 + x);
putpixel(x0 - y, y0 + x);
putpixel(x0 - x, y0 + y);
putpixel(x0 - x, y0 - y);
putpixel(x0 - y, y0 - x);
putpixel(x0 + y, y0 - x);
putpixel(x0 + x, y0 - y);
if (err <= 0)
{
y++;
err += dy;
dy += 2;
}
if (err > 0)
{
x--;
dx += 2;
err += dx - (radius << 1);
}
}
이 (비트 맵에 저장된) 다음과 같은 출력을 제공한다 내가 설정으로이 accommplish 수 있습니다 생각
: 그것은 다음과 같습니다, 그래서 채워집니다 반지름에 매회 반경 - 그래서 그것은 -1 반지름으로 동일한 원을 그린다 - 반지름 = 0까지. 따라서 기본적으로 더 이상 그릴 원 (반지름 = 0)이있을 때까지 새로운 원이 오래된 원으로 채워질 때마다 그려집니다. 내 코드는 다음과 같습니다.
int x0, int y0, int radius;
x0 = 320; //assign values
y0 = 240;
radius = 180;
int x = radius-1;
int y = 0;
int dx = 1;
int dy = 1;
int err = dx - (radius << 1);
while(radius!=0) {
while (x >= y)
{
putpixel(x0 + x, y0 + y);
putpixel(x0 + y, y0 + x);
putpixel(x0 - y, y0 + x);
putpixel(x0 - x, y0 + y);
putpixel(x0 - x, y0 - y);
putpixel(x0 - y, y0 - x);
putpixel(x0 + y, y0 - x);
putpixel(x0 + x, y0 - y);
if (err <= 0)
{
y++;
err += dy;
dy += 2;
}
if (err > 0)
{
x--;
dx += 2;
err += dx - (radius << 1);
}
}
x0 = x0 - 1; //getting the next circle until radius = 0
y0 = y0 -1;
radius = radius - 1;
x = radius-1;
y = 0;
dx = 1;
dy = 1;
err = dx - (radius << 1);
}
이 코드는 내가 어떻게 채울 수 있는지 생각해야한다.하지만 내가 얻는 것은 무한 루프이다. 왜 그런 생각이 들까? 아니면 midpoint 알고리즘을 사용하여 원을 채우기위한 다른 방법이 있습니까?
인사말
첫 번째 경우 : 모든 루프에서 x, y, err과 같은 다양한 인덱스의 값을 인쇄하고 멈추는 위치를 관찰하기 위해 많은 printfs를 넣으십시오. 또한 많은 양의 출력을 피하기 위해 작은 원을 사용하십시오. –
@ Jean-FrançoisFabre 그 충고에 감사드립니다. 나는 그것을 시도하고 반지름을 5로 낮 춥니 다. 그러나 어떻게하면 나머지를 채울 수 있을지 생각할 수 있습니다. –
아, 홍수 채우기 알고리즘을 사용할 수도 있습니다. 내가 하나 (파이썬에서 구현) 여기 설명 : https://stackoverflow.com/questions/40963288/fatal-python-error-cannot-recover-from-stack-overflow-during-flood-fill/40963737?s= 2 | 26.2027 # 40963737 –