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>已经做了一个整体框架的布局,但是那个程序只是 ...
随机推荐
- Delphi+DBGrid导出Excel
uses ComObj; //DBGrid:指定的DBGrid;SaveFileName:要保存的文件名 function ExportDBGrid(DBGrid: TDBGrid; SaveFile ...
- zabbix2.2 - FromDual.MySQL.check" became not supported
升级zabbix后发现zabbix server日志中多个实例报错如下: 27974:20171227:113001.724 item "实例name:FromDual.MySQL.chec ...
- Omni(USDT)钱包安装(ubuntu)
一.下载Omni Layer钱包 wget https://bintray.com/artifact/download/omni/OmniBinaries/omnicore-0.3.0-x86_64- ...
- ueditor 使用
之前在微信上用到富文本编辑器,选用了ueditor 之后又在项目中使用到了,因此打算写下来记录一下. 1 首先去下载ueditor 2 我的是 MVC项目,贴一下:粘贴到Content下 3 然后 ...
- The Shortest Statement CodeForces - 1051F(待测试)
#include <iostream> #include <cstdio> #include <sstream> #include <cstring> ...
- day31 configparser 配置文件模块
#__author__: Administrator #__date__: 2018/8/8 # configparse 生成配置文件,配置文会以件.ini结尾 # 对于格式有要求 # 创建配置文档 ...
- 10 Zabbix Item类型之Zabbix IPMI类型
点击返回:自学Zabbix之路 Zabbix Item类型之Zabbix IPMI类型 一般使用zabbix IPMI 监控硬件信息,比如说温度. 在编译安装zabbix server的时候,一定要加 ...
- 洛谷 P3705 [SDOI2017]新生舞会 解题报告
P3705 [SDOI2017]新生舞会 题目描述 学校组织了一次新生舞会,\(Cathy\)作为经验丰富的老学姐,负责为同学们安排舞伴. 有\(n\)个男生和\(n\)个女生参加舞会买一个男生和一个 ...
- HDU 5608 - function
HDU 5608 - function 套路题 图片来自: https://blog.csdn.net/V5ZSQ/article/details/52116285 杜教筛思想,根号递归下去. 先搞出 ...
- C#反射遍历/查询类中的属性以及值
遍历一个类/或类对象的属性/值,很有用,看个例子 using System; using System.Collections.Generic; using System.Linq; using Sy ...