C# 实现Bresenham算法(vs2010)
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)的更多相关文章
- 《图形学》实验七:中点Bresenham算法画椭圆
开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画椭圆. 实验结果: 代码: #include <gl/glut.h> #define WIDTH 50 ...
- 《图形学》实验六:中点Bresenham算法画圆
开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画圆. 实验结果: 代码: #include <gl/glut.h> #define WIDTH 500 ...
- 《图形学》实验五:改进的Bresenham算法画直线
开发环境: VC++6.0,OpenGL 实验内容: 使用改进的Bresenham算法画直线. 实验结果: 代码: //中点Bresenham算法生成直线 #include <gl/glut.h ...
- 《图形学》实验四:中点Bresenham算法画直线
开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画直线. 实验结果: 代码: //中点Bresenham算法生成直线 #include <gl/glut.h& ...
- 利用canvas实现的中点Bresenham算法
Bresenham提出的直线生成算法的基本原理是,每次在最大位移方向上走一步,而另一个方向是走步还是不走步取决于误差项的判别,具体的实现过程大家可以去问度娘.我主要是利用canvas画布技术实现了这个 ...
- 通过Bresenham算法实现完成矢量线性多边形向栅格数据的转化
1.实验目的与要求 目的:通过本次实验,完成矢量线性多边形向栅格数据的转化过程: 要求:采用VC++6.0实现. 2.实验方法 采用Bresenham算法实现 3.实验材料 直线的定义:y = x/3 ...
- Bresenham算法画填充圆及SDL代码实现
画圆是计算机图形操作中一个非常重要的需求.普通的画圆算法需要大量的浮点数参与运算,而众所周知,浮点数的运算速度远低于整形数.而最终屏幕上影射的像素的坐标均为整形,不可能是连续的线,所以浮点数运算其实纯 ...
- 基于Bresenham算法画圆
bresenham算法画圆思想与上篇 bresenham算法画线段 思想是一致的 画圆x^2+y^2=R^2 将他分为8个部分,如上图 1. 只要画出1中1/8圆的圆周,剩下的就可以通过对称关系画出这 ...
- bresenham算法的FPGA的实现2
在上一篇里http://www.cnblogs.com/sepeng/p/4045593.html <bresenham算法的FPGA的实现1>已经做了一个整体框架的布局,但是那个程序只是 ...
随机推荐
- vuex的数据交互
methods:{ ...mapMutations({aaa:hs}) //将mutations的方法暴露出来,进行调用 aaa是他的名字 ...mapActions(['hs']) //将actio ...
- Linux 更改root与home分区大小的方法总结
1. 安装了CentOS7.5的虚拟机 但是发现里面的操作系统 home 分区占到了400g 根分区只有50g 认为不太好,所以要改一下. 2.方法. 好像是xfs的文件格式, 没法使用resize2 ...
- React 表单refs
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- Alpha、伪Beta 发布个人感想与体会
1.Alpha版本 在Alpha版本发布时,我在Fantacy组,那时的体会我已在前面写过,现在回想起来,我觉得自己的决定似乎做的并不是很糟糕,因为来到新的团队里,我学到了很多东西,认识了很多技术很好 ...
- 关于一个常用的CheckBox样式
我们在使用CheckBox的时候,原始的样式有时不能满足我们的需求,这是我们就需要更改其模板,比如我们常用的一种,在播放器中“播放”.“暂停”按钮,其实这也是一种CheckBox,只不过我们只是修改了 ...
- Performance testing test scenarios
1 check if page load time is within acceptable range2 check page load on slow connections 3 check re ...
- loadrunner 基础-学习笔记一
由于公司要使用loadrunner暂停学习jmeter 1 loadrunner组件: virtual user generator:录制最终用户业务流程并创建自动化性能测试脚本,vuser脚本 co ...
- 选择 Delphi 2007 ( CodeGear Delphi 2007 for Win32 Version 11.0.2837.9583 ) 的理由
选择 Delphi 2007 ( CodeGear Delphi 2007 for Win32 Version 11.0.2837.9583 ) 的理由 我不喜欢用InstallRite的全自动安装包 ...
- spring cloud实战与思考(五) JWT之携带敏感信息
需求: 需要将一些敏感信息保存在JWT中,以便提高业务处理效率. 众所周知JWT协议RFC7519使用Base64Url对Header和Payload的Json字符串进行编解码.A JWT is re ...
- caffe训练resume
MODEL=${EXP}/model/${NET_ID}/pspnet101_VOC2012.caffemodel SNAPSHOT=${EXP}/model/${NET_ID}/train_iter ...