首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

画直线的算法改进解决思路

2012-05-05 
画直线的算法改进下面这个LCD画直线的算法,如何修改,才能够通过一个参数控制画直线的粗细?void draw_line(

画直线的算法改进

下面这个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;
  }
  }
}


[解决办法]

探讨
下面这个LCD画直线的算法,如何修改,才能够通过一个参数控制画直线的粗细?

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


/*
*******************************************************************************……

[解决办法]
探讨
下面这个LCD画直线的算法,如何修改,才能够通过一个参数控制画直线的粗细?

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


/*
*******************************************************************************……

热点排行