画直线的算法改进
下面这个LCD画直线的算法,如何修改,才能够通过一个参数控制画直线的粗细?
void draw_line(int x1, int y1, int x2, int y2, int size,uint8 color)
/*
*********************************************************************************************************
** 函数名称 :draw_line(uint16 x1, uint16 y1, uint16 x2, uint16 y2, uint8 color)
** 函数功能 :画直线
** 入口参数 :uint16 x1 起始X坐标;uint16 y1 起始Y坐标;
** uint16 x2 终止X坐标;uint16 y2 终止Y坐标;
** uint8 color 点颜色
*********************************************************************************************************
*/
void draw_line(int x1, int y1, int x2, int y2, uint8 color)
{
int dx = abs(x2 - x1),
dy = abs(y2 - y1),
yy = 0;
if (dx < dy)
{
yy = 1;
swap_int(&x1, &y1);
swap_int(&x2, &y2);
swap_int(&dx, &dy);
}
int ix = (x2 - x1) > 0 ? 1 : -1,
iy = (y2 - y1) > 0 ? 1 : -1,
cx = x1,
cy = y1,
n2dy = dy * 2,
n2dydx = (dy - dx) * 2,
d = dy * 2 - dx;
if (yy) { // 如果直线与 x 轴的夹角大于 45 度
while (cx != x2) {
if (d < 0) {
d += n2dy;
} else {
cy += iy;
d += n2dydx;
}
draw_point(cy, cx,color);
cx += ix;
}
} else { // 如果直线与 x 轴的夹角小于 45 度
while (cx != x2) {
if (d < 0) {
d += n2dy;
} else {
cy += iy;
d += n2dydx;
}
draw_point(cx, cy,color);
cx += ix;
}
}
}