위키피디아 단순화 된 버전 인 C에서 Bresenham의 라인 알고리즘을 구현하려고합니다. 내 코드가 무한 루프에 갇혀서 왜 그럴 수 없는지! (내 확신이 있지만 내 지식과 관련이 있음)Bresenham의 라인 함수 C
void Draw_line (unsigned int x0, unsigned int y0,unsigned int x1, unsigned int y1)
{
unsigned int dx = abs(x1-x0);
unsigned int dy = abs(y1-y0);
signed short sx,sy;
signed int err,e2;
if (x0 < x1) {sx = 1;} else {sx = -1;}
if (y0 < y1) {sy = 1;} else {sy = -1;}
err = dx-dy;
while (!(x0==x1 && y0==y1))
{
GLCD_PutPixel(x0, y0);
e2 = 2*err;
if (e2 > -dy)
{
err = err - dy;
x0 += sx;
}
if (e2 < dx)
{
err = err + dx;
y0 += sy;
}
}
}
고마워!
편집 : 루프의 조건부가 잘못되어 직선을 플롯하지 않았으므로 올바른 것으로 변경했습니다.
http://www.roguebasin.com/index.php?title=Bresenham%27s_Line_Algorithm – user1095108
다른 기술을 모르는 경우 코드를 디버깅하는 가장 좋은 방법은 printf 문을 추가하는 것입니다. –
전체에서 부호있는 정수를 사용하면 코드가 작동합니다. –