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>已经做了一个整体框架的布局,但是那个程序只是 ...
随机推荐
- 如何自定义一个组件loading
使用时需要Vue.use()一下
- [日常工作] SUSE设置上网ip地址
1. 同事搜到的命令 ifconfig eth0 10.24.25.8 netmask 255.255.0.0 up route add default gw 10.24.255.254 2. 修改 ...
- Jquery :animate反复执行的动画可以利用函数的回调
<html><head><script type="text/javascript" src="/jquery/jquery.js" ...
- Ajax 新建对象
XMLHttpRequest对象是Ajax的基础,用于后台与服务器进行数据交互. 新的浏览器支撑XMLHttpRequest,而旧的浏览器不支持. var vari; if(window.XMLHtt ...
- @classmethod 与 @staticmethod 区别
- echarts之简单的入门——【一】做个带时间轴的柱状统计图
百度Echarts 官网首页 http://echarts.baidu.com/ 配置项手册 http://echarts.baidu.com/option.html#title GL配置项手册 h ...
- 睡前小dp-codeforce414B-dp+一点点想法
http://codeforces.com/problemset/problem/414/B 定义一个串为好的串当这个串符合 di|di+1,1<i<k-1 给定一个n为串中元素的取值范围 ...
- day9 笔记
集合 去重 无序 元素不可变类型 可hash 命令 set() 创建可变集合 frozenset() 创建不可变集合 .add() 添加元素,只能放单个值 .update() 添加元素,可以更新多个值 ...
- 【POI 每日题解 #4】 [POI2008]MAF-Mafia
[POI2008]MAF-Mafia 很容易看出是拓扑 但不容易想出来怎么做[可能是我太菜 首先 入度为零的人是肯定死不了的 接着 我们分成环和链分析 对于一个链 最多的情况就是顺着一个个开枪 最后剩 ...
- 洛谷 P2149 [SDOI2009]Elaxia的路线 解题报告
P2149 [SDOI2009]Elaxia的路线 题目描述 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. Elaxia ...