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>已经做了一个整体框架的布局,但是那个程序只是 ...
随机推荐
- [读书笔记]SQLSERVER企业级平台管理实践读书笔记01
1. SQLSERVER信息收集 SQLDIAG 使用界面 C:\Users\Administrator>sqldiag2018/01/02 08:13:26.10 SQLDIAG Collec ...
- MES方向准备
与WMS系统对接,实现MES系统中原材料入库.采购退货.生产订单.原材料出库.成品入库单.完工报告.成品出库单.成品入库单.成品出库单.标准出货.出货计划等数据与单据作业数据同步. 车间立体仓库.AG ...
- Spring学习14-源码下载地址
今天想下载一下Spring的源代码,登录到Spring官网,傻眼了,根本找不到下载的地方!费了九牛二虎之力在网上找到了一个下载地址,记下来,免得下次再次傻找. http://s3.amazonaws. ...
- loadrunner分析结果二
5 worst transaction transaction name:事务名 failure ratio[%](exceeded time/transaction duration)失败率 (超标 ...
- 荣耀实锤Magic2或将助力AI,再次带动成长?
临近年底,热闹了一年的手机圈纷纷偃旗息鼓,准备为明年3月的新品发力.然而今天(12月7日),恰逢节气大雪,@荣耀手机 在微博发布了一张预热海报,随后荣耀总裁赵明转发这条微博表示「关于技术,真的有很多话 ...
- Spring IOC和Spring AOP的实现原理(源码主线流程)
写在前面 正本文参考了<spring技术内幕>和spring 4.0.5源码.本文只描述原理流程的主线部分,其他比如验证,缓存什么可以具体参考源码理解. Spring IOC 一.容器初始 ...
- Borg Maze POJ - 3026 (BFS + 最小生成树)
题意: 求把S和所有的A连贯起来所用的线的最短长度... 这道题..不看discuss我能wa一辈子... 输入有坑... 然后,,,也没什么了...还有注意 一次bfs是可以求当前点到所有点最短距离 ...
- day30 __new__ 以及单例模式
__new__ # __new__ # object.__new__() class A : def __init__(self): self.x = 1 print("init执行啦&qu ...
- [hdu3966]Aragorn's Story
传送门 题目描述 Our protagonist is the handsome human prince Aragorn comes from The Lord of the Rings. One ...
- volatile的实现原理与应用
Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令. vola ...