using System;

 using System.Collections.Generic;

 using System.ComponentModel;

 using System.Data;

 using System.Linq;

 using System.Text;

 using System.Windows.Forms;

 using System.Drawing;

 using System.Drawing.Drawing2D;

 namespace Bresenham

 {

     public partial class Form1 : Form

     {

         Graphics g;

         const int CellSize = ;

         int iclick = ;

         int Cols, Rows;

         Point A,B;

         public Form1()

         {

             InitializeComponent();

             g = CreateGraphics();

             Rows = this.Height / ;

             Cols = this.Width / ;

         }

         private void Form1_Load(object sender, EventArgs e)

         {

         }

         private void Form1_Paint(object sender, PaintEventArgs e)//程序启动时调用一次DrawSence()

         {

             DrawSence();

         }

         private void DrawSence()//绘制背景网格

         {

             int i, j;

             Point M, N;

             Pen p = new Pen(Brushes.Black, );

             g.Clear(Color.White);

             for (i = ; i < Rows   ; i )

             {

                 M = new Point(, i * CellSize);

                 N = new Point(Width, i * CellSize);

                 g.DrawLine(p, M, N);

             }

             for (j = ; j < Cols   ; j )

             {

                 M = new Point(j * CellSize, );

                 N = new Point(j * CellSize, Height);

                 g.DrawLine(p, M, N);

             }                        

         }

         private void Form1_MouseClick(object sender, MouseEventArgs e)//记录鼠标坐标,并绘制位置

         {

             switch (iclick)

             {

                 case :

                     {

                         A = new Point(e.X / CellSize, e.Y / CellSize);

                         DrawSence();

                         g.FillEllipse(Brushes.Red, A.X * CellSize, A.Y * CellSize, CellSize, CellSize);

                         iclick = ;

                         break;

                     }

                 case :

                     {

                         B = new Point(e.X / CellSize, e.Y / CellSize);

                         DoBresenham(A,B);

                         g.FillEllipse(Brushes.Red, B.X * CellSize, B.Y * CellSize, CellSize, CellSize);

                         g.FillEllipse(Brushes.Red, A.X * CellSize, A.Y * CellSize, CellSize, CellSize);

                         iclick = ;

                         break;

                     }

             }

         }

         private void DoBresenham(Point p1,Point p2)//实现Bresenham算法,绘制离散像素点

         {

             int dx = p2.X - p1.X;

             int dy = p2.Y - p1.Y;

             int stepX = , stepY = ;

             if (dx < )

             {

                 dx = -dx;

                 stepX = -;

             }

             else

                 stepX = ;

             if (dy < )

             {

                 dy = -dy;

                 stepY = -;

             }

             else

                 stepY = ;

             if (dx > dy)

             {

                 int y = p1.Y;

                 int d =  * dy - dx;

                 for (int i = p1.X; i != p2.X; i  = stepX)

                 {

                     g.FillEllipse(Brushes.Blue, i * CellSize, y * CellSize, , );

                     d = d    * dy;

                     if (d >= )

                     {

                         y  = stepY;

                         d = d -  * dx;

                     }

                 }

             }

             else

             {

                 int x = p1.X;

                 int d =  * dx - dy;

                 for (int i = p1.Y; i != p2.Y; i  = stepY)

                 {

                     g.FillEllipse(Brushes.Blue, x * CellSize, i * CellSize, , );

                     d = d    * dx;

                     if (d >= )

                     {

                         x  = stepX;

                         d = d -  * dy;

                     }

                 }

             }                                       

         }

     }

 }

C# 实现Bresenham算法(vs2010)的更多相关文章

  1. 《图形学》实验七:中点Bresenham算法画椭圆

    开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画椭圆. 实验结果: 代码: #include <gl/glut.h> #define WIDTH 50 ...

  2. 《图形学》实验六:中点Bresenham算法画圆

    开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画圆. 实验结果: 代码: #include <gl/glut.h> #define WIDTH 500 ...

  3. 《图形学》实验五:改进的Bresenham算法画直线

    开发环境: VC++6.0,OpenGL 实验内容: 使用改进的Bresenham算法画直线. 实验结果: 代码: //中点Bresenham算法生成直线 #include <gl/glut.h ...

  4. 《图形学》实验四:中点Bresenham算法画直线

    开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画直线. 实验结果: 代码: //中点Bresenham算法生成直线 #include <gl/glut.h& ...

  5. 利用canvas实现的中点Bresenham算法

    Bresenham提出的直线生成算法的基本原理是,每次在最大位移方向上走一步,而另一个方向是走步还是不走步取决于误差项的判别,具体的实现过程大家可以去问度娘.我主要是利用canvas画布技术实现了这个 ...

  6. 通过Bresenham算法实现完成矢量线性多边形向栅格数据的转化

    1.实验目的与要求 目的:通过本次实验,完成矢量线性多边形向栅格数据的转化过程: 要求:采用VC++6.0实现. 2.实验方法 采用Bresenham算法实现 3.实验材料 直线的定义:y = x/3 ...

  7. Bresenham算法画填充圆及SDL代码实现

    画圆是计算机图形操作中一个非常重要的需求.普通的画圆算法需要大量的浮点数参与运算,而众所周知,浮点数的运算速度远低于整形数.而最终屏幕上影射的像素的坐标均为整形,不可能是连续的线,所以浮点数运算其实纯 ...

  8. 基于Bresenham算法画圆

    bresenham算法画圆思想与上篇 bresenham算法画线段 思想是一致的 画圆x^2+y^2=R^2 将他分为8个部分,如上图 1. 只要画出1中1/8圆的圆周,剩下的就可以通过对称关系画出这 ...

  9. bresenham算法的FPGA的实现2

    在上一篇里http://www.cnblogs.com/sepeng/p/4045593.html <bresenham算法的FPGA的实现1>已经做了一个整体框架的布局,但是那个程序只是 ...

随机推荐

  1. Typecho博客迁移

    在新的机器上先搭建好一个新的Typecho博客,数据库名称和原博客相同(可以省不少事). 备份原来博客的usr目录. 备份mysql数据库,命令: mysqldump -uroot -p --all- ...

  2. Android提供的layout文件存放位置

    在编程的过程中,会用到android.R.layout下的一些常量.与这些常量对应的,Android提供了对应点的layout布局文件. android.jar中有对应的xml文件,但是打开的时候通常 ...

  3. docker --Nexus仓库

    Nexus 简介 Nexus 是个仓库管理器,目前主要分2大版本:2.X 和 3.X.2.X 主要支持的格式是Maven.P2.OBR.Yum.3.X主要支持的是Docker.NuGet.npm.Bo ...

  4. BZOJ1782[USACO 2010 Feb Gold 3.Slowing down]——dfs+treap

    题目描述 每天Farmer John的N头奶牛(1 <= N <= 100000,编号1…N)从粮仓走向他的自己的牧场.牧场构成了一棵树,粮仓在1号牧场.恰好有N-1条道路直接连接着牧场, ...

  5. BZOJ4530 BJOI2014大融合(线段树合并+并查集+dfs序)

    易知所求的是两棵子树大小的乘积.先建出最后所得到的树,求出dfs序和子树大小.之后考虑如何在动态加边过程中维护子树大小.这个可以用树剖比较简单的实现,但还有一种更快更优美的做法就是线段树合并.对每个点 ...

  6. Uva10474-STL水题-白书

    白书的一道水题.话说好久没认真做难题了.今天出了排名,所有队伍里倒数第一啊! 代码没什么可说的了. #include <algorithm> #include <cstring> ...

  7. MT【223】二次函数最大最小

    若函数$f(x)=ax^2+20x+14(a>0)$对任意实数$t$,在闭区间$[t-1,t+1]$上总存在两实数$x_1,x_2$,使得$|f(x_1)-f(x_2)|\ge8$成立,则实数$ ...

  8. Elasticsearch利用cat api快速查看集群状态、内存、磁盘使用情况

    使用场景 当Elasticsearch集群中有节点挂掉,我们可以去查看集群的日志信息查找错误,不过在查找错误日志之前,我们可以通过elasticsearch的cat api简单判断下各个节点的状态,包 ...

  9. [IOI2018] seats 排座位

    [IOI2018] seats 排座位 IOI2018题解 压缩状态思想很不错的 每次把原来的贡献减掉,新来的再加上 最多涉及10个点 注意: 1.去重 2.下标从0开始 3.线段树初始的最小值个数都 ...

  10. C# 随机四位数验证码

    string str ="abcdefghigklmnopqrstuvwxyzABCDEFJHIGKLMNOPQRSTUVWXYZ1234567890"; while(true){ ...