#include<stdio.h>

 #include<stdlib.h>

 #include"graphics.h"

 //函数声明

 void MidBrehansem(int x0, int y0, int x1, int y1);  //中点MidBrehansem算法

 void swap(int &x, int &y);  //利用引用传递交换值

 int main()

 {

     int gdriver = DETECT, gmode;

     int x0, y0, x1, y1;

     printf("Please input start point:\n");

     scanf("%d%d", &x0, &y0);

     printf("Please input end point:\n");

     scanf("%d%d", &x1, &y1);

     initgraph(&gdriver, &gmode, "");

     MidBrehansem(x0, y0, x1, y1);

     system("pause");

     closegraph();

     return ;

 }

 //中点MidBrehansem算法

 void MidBrehansem(int x0, int y0, int x1, int y1)

 {

     int  dx, dy,i,di;

     double k;

     if (x0 > x1)

     {

         swap(x0, x1);

         swap(y0, y1);

     }

     int x = x0, y = y0;     //定义到前面会从x1,y1开始画线

     dx = x1 - x0;

     dy = y1 - y0;

     k = 1.0*dy / dx;

     i = (abs(dy)>abs(dx)) ? abs(dy): abs(dx);

     if (k >= )

     {

         di =  * dx + dy;

         while (i--)

         {

             putpixel(x, y, RED);

             if (di >= )

             {

                 di +=  * (dx - dy);

                 x++;

             }

             else

                 di +=  * dx;

             y++;

         }

     }

     else if (k >=  && k < )

     {

         di = dx -  * dy;

         while (i--)

         {

             putpixel(x, y, YELLOW);

             if (di < )

             {

                 di +=  * (dx - dy);

                 y++;

             }

             else

                 di += (-)*dy;

             x++;

         }

     }

     else if (k >= - && k < )

     {

         di = -dx -  * dy;

         while (i--)

         {

             putpixel(x, y, YELLOW);

             if (di >= )

             {

                 di += (-)*(dx + dy);

                 y--;

             }

             else

                 di += (-)*dy;

             x++;

         }

     }

     else

     {

         di = - * (dx + dy);

         while (i--)

         {

             putpixel(x, y, WHITE);

             if (di < )

             {

                 di += (-)*(dx + dy);

                 x++;

             }

             else

                 di += (-)*dx;

             y--;

         }

     }

 }

 //利用引用传递交换值

 void swap(int &x, int &y)

 {

     int t;

     t = x;

     x = y;

     y = t;

 }

中点Brehensam画线算法的更多相关文章

  1. 中点Brehensam画圆算法

    #include<stdio.h> #include<stdlib.h> #include<graphics.h> #include<math.h> v ...

  2. 两种画线算法(DDA&Bersenham)

    DDA(digital differential analyzer) 由直线的斜截式方程引入 对于正斜率的线段,如果斜率<=1,则以单位x间隔(δx=1)取样,并逐个计算每一个y值 Yk+1 = ...

  3. Bresenham画线算法

    [Bresenham画线算法] Bresenham是一种光栅化算法.不仅可以用于画线,也可以用用画圆及其它曲线. 通过lower与upper的差,可以知道哪一个点更接近线段: 参考:<计算机图形 ...

  4. Bezier画线算法

    编译器:VS2013 描述:Bezier画线是利用导数相同拼接曲线,使曲线十分光滑,而不是随意拼接观赏性很差 主函数段 #include "stdafx.h" #include&l ...

  5. 计算机图形学(二)输出图元_3_画线算法_2_DDA算法

    DDA算法        数字微分分析仪(digital differential analyzer, DDA)方法是一种线段扫描转换算法.基于使用等式(3.4)或等式(3.5)计算的&x或& ...

  6. DDA画线算法

    #include<stdio.h> #include"graphics.h" #include<math.h> #include<stdlib.h&g ...

  7. Bresenham直线算法与画圆算法

    在我们内部开发使用的一个工具中,我们需要几乎从 0 开始实现一个高效的二维图像渲染引擎.比较幸运的是,我们只需要画直线.圆以及矩形,其中比较复杂的是画直线和圆.画直线和圆已经有非常多的成熟的算法了,我 ...

  8. 计算机图形学DDA画线法+中点画线法+Bresenham画线法

    #include <cstdio> #include <cstring> #include <conio.h> #include <graphics.h> ...

  9. 画线函数Glib_Line算法的研究

      在这里首先先简单把我对函数的功能的理解阐述一下,方便后面的分析:Glib_Line函数实现的功能是通过参数给定(x1,y1,x2,y2,color),来确定起点(x1,y1)和终点(x2,y2)两 ...

随机推荐

  1. 【转载】maven用处

    http://bbs.csdn.net/topics/80014314 当您的项目逐渐变得庞大和复杂时,最好使用一种构建工具来自动构建您的项目.例如,一个典型的java项目,每次构建时都要经历编译ja ...

  2. L1-013 计算阶乘和

    对于给定的正整数N,需要你计算 S=1!+2!+3!+...+N!. 输入格式: 输入在一行中给出一个不超过10的正整数N. 输出格式: 在一行中输出S的值. 输入样例: 3 输出样例: 9   #i ...

  3. html网页设计

    对于html文档可以直接通过浏览器打开并解释执行,不需要使用服务器.一个html文档的架构,一般由3对标签构成:<html></html>,<head></h ...

  4. 【重大更新】DevExpress v17.2新版亮点—WinForms篇(二)

    用户界面套包DevExpress v17.2终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.开篇介绍了DevExpress WinForms v17.2 Data Grid Control ...

  5. 深入理解Linux网络技术内幕——PCI层和网络接口卡

    概述     内核的PCI子系统(即PCI层)提供了不同设备一些通用的功能,以便简化各种设备驱动程序.     PCI层重要结构体如下: pci_device_id     设备标识,根据PCI标志定 ...

  6. 多种数据库之间的同步工具SymmetricDS

    代码:https://github.com/JumpMind/symmetric-ds 原理: 通过触发器模式同步时,是将数据库的变化记录到某个系统表中,然后在客户端建立缓冲,并定期将变化push到接 ...

  7. union-find算法

     1.背景 <算法>一书中提到了关于算法的一些基本思想 优秀的算法因为能够解决实际的问题而变得更为重要: 高效算法的代码可以很简单: 理解某个实现的性能特点是一项有趣而令人满足的挑战: 在 ...

  8. Redmine开源项目管理搭建

    今年7月底,跳槽到新公司,新公司对于项目管理,也是从今年上半年开始有这个想法的.都是新同事,整个项目管理流程内部讨论决定如何制定. 刚入职时,对于项目需求的管理都是通过excel和project记录的 ...

  9. centos7系统初始化

    echo "# swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间" >> /etc/sysctl.conf echo -e "v ...

  10. Ubuntu终端点击确定按钮的方法

    Ubuntu终端里出现需要点击 确定 按钮的时候,直接鼠标点击 确定 是不生效的,这个时候需要利用tab键选中这个 确定 按钮,然后回车键就可以了.