画直线的算法改进

bandaoyu 2012-04-18 10:35:13

下面这个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;
}
}
}
...全文
159 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzw_0827 2012-04-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
下面这个LCD画直线的算法,如何修改,才能够通过一个参数控制画直线的粗细?

void draw_line(int x1, int y1, int x2, int y2, int size,uint8 color)


/*
*******************************************************************************……
[/Quote]我用win7自带的那个专用字符编辑程序的直线和刷子的对比下模拟的led灯的 那个刷子做出的粗直线就是直线垂直平移出来的
wzw_0827 2012-04-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
下面这个LCD画直线的算法,如何修改,才能够通过一个参数控制画直线的粗细?

void draw_line(int x1, int y1, int x2, int y2, int size,uint8 color)


/*
*******************************************************************************……
[/Quote]能不能就用平移的方法呢

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧