我遇到了一个练习题,需要使用 Bressenham 算法画一条线。但是,这个算法仅在线段向下或向右延伸时运行正常,当线段向上或向左延伸时就不再起作用了。有没有人可以帮助我解决这个问题?
void draw_line(t_data img, int xStart, int yStart, int xEnd, int yEnd)
{
int dx;
int dy;
int pk;
int x;
int y;
dx = xEnd - xStart;
dy = yEnd - yStart;
x = xStart;
y = yStart;
while(x <= xEnd)
{
if(pk >= 0)
{
printf("in if ");
my_mlx_pixel_put(&img, x, y, 0x00FF0000);
y = y + 1;
pk = pk + 2 * dy - 2 * dx;
}
else
{
my_mlx_pixel_put(&img, x, y, 0x00FF0000);
pk = pk + 2 * dy;
}
x = x + 1;
count ++;
}
}
它适用于这个
draw_line(img, 300, 300, 400, 360);
但不是为了这个
draw_line(img, 300, 300, 200, 260);
感谢您的帮助!!
pk
。 - ikegamix <= xEnd
时,你的代码明显期望x
是递增的。如果不是这种情况,你可以交换坐标。然后你只需要关心y
是否需要处理不同的情况即可。 - Gerhardhx
和y
。 - Gerhardh