新手入门
- 积分
- 8
- 金钱
- 8
- 注册时间
- 2023-5-30
- 在线时间
- 1 小时
|
如何理解OLED画线函数中的判断和error变量?
uint8_t atk_md0096_oled_draw_line(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, atk_md0096_oled_show_mode_t mode)
{
uint8_t ret;
uint8_t x_delta;
uint8_t y_delta;
int8_t x_sign;
int8_t y_sign;
int16_t error;
int16_t error2;
x_delta = (x1 < x2) ? (x2 - x1) : (x1 - x2);//计算X的距离
y_delta = (y1 < y2) ? (y2 - y1) : (y1 - y2);//计算Y的距离
x_sign = (x1 < x2) ? 1 : -1;//
y_sign = (y1 < y2) ? 1 : -1;//
error = x_delta - y_delta;
ret = atk_md0096_oled_draw_point(x2, y2, mode);
if (ret != ATK_MD0096_EOK)
{
return ret;
}
while ((x1 != x2) || (y1 != y2))
{
ret = atk_md0096_oled_draw_point(x1, y1, mode);
if (ret != ATK_MD0096_EOK)
{
return ret;
}
error2 = error<< 1;
if (error2 > -y_delta)
{
error -= y_delta;
x1 += x_sign;
}
if (error2 < x_delta)
{
error += x_delta;
y1 += y_sign;
}
}
return ATK_MD0096_EOK;
}
|
|