【发布时间】:2014-04-16 12:53:08
【问题描述】:
我正在尝试在维基百科简化版 c 中实现 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;
}
}
}
谢谢!
编辑:循环的条件错误,所以它没有绘制直线,将其更改为正确的。
【问题讨论】:
-
当您不知道任何其他技术时,调试代码的最佳方法是添加 printf 语句。
-
如果您始终使用有符号整数,您的代码应该可以工作。
-
启用来自编译器的所有警告(例如,
-Wall -Wextra,如果您使用的是 gcc)。然后修复编译器警告的代码中的所有潜在问题。 -
谢谢大家的解决方案,确实是有符号整数。我在嵌入式平台上编码,这就是为什么我无法正确调试它