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

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

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

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

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

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

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

源代码展示:

  #include<stdio.h>  #include<graphics.h>  #include<math.h>  #include<conio.h>  #define x0 400    //定义全局变量x0,y0:坐标轴中心(x0,y0)  #define y0 300             void Bresenham(int x1, int y1, int x2, int y2)   {   int x, y, dx, dy, p1, i;   dx = x2 - x1;               dy = y2 - y1;   if (abs(dx) > abs(dy)) //斜率绝对值在(0,1),步进方向为x轴   {          if (x1 < x2)   //默认画点从左往右画   {             x = x1;    y = y1;   }   else   {    x = x2;    y = y2;   }       putpixel(x + x0, y0 - y, RED);   Sleep(50);   p1 = 2 * abs(dy) - abs(dx);     //计算初始pi的值   for (i = min(x1, x2); i < max(x1, x2); i++)    {    x = x + 1;    if (p1 >= 0)     {    if (dx*dy >= 0)     y = y + 1;    else     y = y - 1;  //若Pi>=0,y(i+1)=y(i)±1    p1 = p1 + 2 * (abs(dy) - abs(dx));  //更新pi    }    else     {    y = y;     //若Pi<0,y(i+1)=y(i)    p1 = p1 + 2 * abs(dy);   //更新pi    }    putpixel(x + x0, y0 - y, RED);    Sleep(50);   }   }   else    {   if (y1 < y2)    {       //步进方向为y轴,默认画点从下往上画         x = x1;    y = y1;   }   else    {    x = x2;    y = y2;   }   putpixel(x + x0, y0 - y, RED);   Sleep(50);   p1 = 2 * abs(dx) - abs(dy);   for (i = min(y1, y2); i < max(y1, y2); i++)    {    y = y + 1;    if (p1 >= 0)     {    if (dx*dy >= 0)   //判断x方向是增加还是减少,很关键     x = x + 1;    else     x = x - 1;    p1 = p1 + 2 * (abs(dx) - abs(dy));    }    else     {    x = x;    p1 = p1 + 2 * abs(dx);    }    putpixel(x + x0, y0 - y, RED);    Sleep(50);   }   }  }  void main()   {   int x1, x2, y1, y2;   printf("请输入两个整数点的坐标(x1,y1),(x2,y2)n");   scanf("%d %d %d %d", &x1, &y1, &x2, &y2);   initgraph(800, 600);  //初始化图形窗口大小   setbkcolor(WHITE);   cleardevice();   setcolor(BLACK);   line(0, y0, x0 * 2, y0); //坐标轴X   line(x0, 0, x0, y0 * 2); //坐标轴Y   Bresenham(x1, y1, x2, y2);      //Bresenham画线算法   _getch();     //等待一个任意输入结束   closegraph();     //关闭图形窗口  }

结果显示:

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。

—-想了解C语言使用Bresenham算法生成直线(easyx图形库)分享!全部内容且更多的C语言教程关注<计算机技术网(www.ctvol.com)!!>

www.ctvol.com true Article C语言使用Bresenham算法生成直线(easyx图形库)分享!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/484680.html

(0)
上一篇 2020年11月10日 上午10:00
下一篇 2020年11月10日 上午10:04

精彩推荐