C语言使用Bresenham算法生成直线(easyx图形库)

  

Bresenham算法是计算机图形学领域使用最广泛的直线扫描转换方法。

  

其原理是:过各行,各列像素中心构造一组虚拟网格线,按直线从起点到终点的顺序计算直线各垂直网格线的交点,然后确定该列像素中与此交点最近的像素。

  

Bresenham算法也是一种计算机图形学中常见的绘制直线的算法,其本质思想也是步进的思想,但由于避免了浮点运算,相当于基于块算法的一种改进算法。

  

 C语言使用Bresenham算法生成直线(easyx图形库)

  

 C语言使用Bresenham算法生成直线(easyx图形库)

  

 C语言使用Bresenham算法生成直线(easyx图形库)

  

源代码展示:

        # include   # include   # include   # include   #定义x0 400//定义全局变量x0, y0:坐标轴中心(x0, y0)   #定义y0 300   空白Bresenham (int x1, int y?, int x2, y2 int)   {   int x, y, dx, dy, p1,我;   dx=x2 - x1;   dy=y2 - y1;   如果(abs (dx)比;abs (dy))//斜率绝对值在(0,1),步进方向为x轴   {   如果(x1 & lt;x2)//默认画点从左往右画   {   x=x1;   y=y?;   }   其他的   {   x=x2;   y=y2;   }   putpixel (x + x0, y0 - y,红色);   睡眠(50);   p1=2 * abs (dy) - abs (dx);//计算初始π的值   (i=min (x1, x2);我& lt;马克斯(x1, x2);我+ +)   {   x=x + 1;   如果(p1祝辞=0)   {   如果(dx * dy祝辞=0)   y=y + 1;   其他的   y=y - 1;//若Pi> y=0, (i + 1)=y (i)±1   p1=p1 + 2 * (abs (dy) - abs (dx));//更新π   }   其他的   {   y=y;//若Pi<0, (i + 1)=y(我)   p1=p1 + 2 * abs (dy);//更新π   }   putpixel (x + x0, y0 - y,红色);   睡眠(50);   }   }   其他的   {   如果(y1 & lt;y2)   {//步进方向为y轴,默认画点从下往上画   x=x1;   y=y?;   }   其他的   {   x=x2;   y=y2;   }   putpixel (x + x0, y0 - y,红色);   睡眠(50);   p1=2 * abs (dx) - abs (dy);   (i=min (y1, y2);我& lt;马克斯(y1, y2);我+ +)   {   y=y + 1;   如果(p1祝辞=0)   {   如果(dx * dy祝辞=0)//判断x方向是增加还是减少,很关键   x=x + 1;   其他的   x=x - 1;   p1=p1 + 2 * (abs (dx) - abs (dy));   }   其他的   {   x=x;   p1=p1 + 2 * abs (dx);   }   putpixel (x + x0, y0 - y,红色);   睡眠(50);   }   }   }   void main ()   {   int x1, x2, y1, y2;   printf(“请输入两个整数点的坐标(x1, y1), (x2, y2) \ n”);   scanf (“% d % d % d % d”,和x1,和日元,x2, y2);   initgraph (800、600);//初始化图形窗口大小   setbkcolor(白色);   清除设备();   改变颜色(黑色);   行(0,y0, x0 * 2, y0);//坐标轴X   线(x0 0 x0, y0 * 2);//坐标Y轴   Bresenham (x1, y1, x2, y2);//Bresenham画线算法   _getch ();//等待一个任意输入结束   closegraph ();//关闭图形窗口   }      

结果显示:

  

 C语言使用Bresenham算法生成直线(easyx图形库)

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

C语言使用Bresenham算法生成直线(easyx图形库)