比较好的一个bresenham算法实现

集合了斜率大于1和小于1的情况

 

 draw_point(x0,y0,color);是我写的一个画点的函数,可以不用管他,关键是画线算法 /*画线函数 此算法是针对Bresenham画线算法的优化算法,去除了乘除法运算,使运算速度更快*/ int draw_line(int x0, int y0, int x1, int y1,unsigned int color) { int dx,dy,dx2,dy2,x_inc,y_inc,e,index; /*如果还没有初始化图形,就线初始化*/ if(isset == 0) { initgraphic(vga_320_200_256); } /*先计算x和y的增量*/ dx = x1-x0; dy = y1-y0; /*计算x轴方向*/ if(dx>=0)/*如果大于等于0,说明方向是向右*/ { x_inc = 1; } else/*否则方向相反*/ { x_inc = -1; dx = -dx;/*算绝对值*/ } /*计算y轴的方向*/ if(dy>=0)/*如果大于等于0,说明方向是向下*/ { y_inc = 1; } else/*否则方向相反*/ { y_inc = -1; dy = -dy;/*算绝对值*/ } /*计算增量的2倍*/ dx2 = dx << 1; dy2 = dy << 1; /*计算斜率的大小,如果斜率小于0说明线段小于45度*/ if(dx > dy) { /*初始化决策变量*/ e = dy2 - dx; /*开始画线*/ for(index=0; index <= dx; index++) { /*画点*/ draw_point(x0,y0,color); /*根据决策变量,计算下一点的y是否增加*/ if (e >= 0) { e-=dx2; y0+=y_inc; } /*调整决策变量的值*/ e+=dy2; /*x轴增进*/ x0+=x_inc; } } else/*斜率大于0,说明线段大于45度*/ { /*初始化决策变量*/ e = dy2 - dx; /*开始画线*/ for(index=0; index <= dy; index++) { /*画点*/ draw_point(x0,y0,color); /*根据决策变量,计算下一点的x是否增加*/ if (e >= 0) { e-=dy2; x0+=x_inc; } /*调整决策变量的值*/ e+=dx2; /*y轴增进*/ y0+=y_inc; } } }

http://blog.csdn.net/gsen/archive/2006/01/08/573966.aspx

你可能感兴趣的:(比较好的一个bresenham算法实现)