Bresenham画线算法的详细介绍

Bresenham画线算法的详细介绍


Bresenham 画线算法是由Bresenham提出的一种精确而有效的光栅线生成算法,该算法仅仅使用了

整数的增量来实现的。

Bresenham算法将对整形参数的符号检测,整形参数的值比于实际险段之间的偏量。

Bresenham算法内容

对于直线方程 Y = kX + b;

A0< 斜率 < 1 时候的算法

1,输入线段的两个端点Point1Point2,并且存储到Point1(x1,y1)Point2(x2,y2)中;

2,Point1载入桢缓存,绘画第一个起始点;

3,计算常量△x、△y2y2(y-x),并且获得一个决策参数的第一个值:P = 2y - x

4,n = 0开始,在沿线经过每个Xn处,进行下面的监测:

如果Pn< 0, 下一个点绘制的是(Xn+1,yn),并且Pn+1= Pn + 2y

如果P0>= 0 ,下一个点绘制的是(Xn+1,Yn+1),并且Pn+1 = Pn + 2(△y-x

5,重复执行x-1步骤4

关于在C++中的算法如下实例:

 

Bresenham画线算法的详细介绍#include<iostream>
Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍
usingnamespacestd;
Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍
voidBresenham(intx1,inty1,intx2,inty2)
Bresenham画线算法的详细介绍Bresenham画线算法的详细介绍
{
Bresenham画线算法的详细介绍
intdx=x2-x1;//△x
Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍intdy=y2-y1;//△y
Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍intp=(2*dy)-dx;//P=2△y-△x
Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍intdobDy=2*dy;//2△y
Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍intdobD=2*(dy-dx);//2(△y-△x)
Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍intPointX,PointY;
Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍
//设置两个临时用来显示位置的变量
Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍if(x1>x2)
Bresenham画线算法的详细介绍Bresenham画线算法的详细介绍
{
Bresenham画线算法的详细介绍
//判断线段的方向
Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍PointX=x2;//起始坐标X
Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍Bresenham画线算法的详细介绍PointY=y2;////起始坐标Y
Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍x2=x1;
Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍}

Bresenham画线算法的详细介绍else
Bresenham画线算法的详细介绍Bresenham画线算法的详细介绍{
Bresenham画线算法的详细介绍PointX
=x1;//起始坐标X
Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍PointY=y1;//起始坐标Y
Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍}

Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍
//达到第一个起始点
Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍cout<<"Point:X:"<<PointX<<"Y:"<<PointY<<endl;
Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍
while(PointX<x2)
Bresenham画线算法的详细介绍Bresenham画线算法的详细介绍
{
Bresenham画线算法的详细介绍PointX
++;
Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍
if(p<0)
Bresenham画线算法的详细介绍Bresenham画线算法的详细介绍
{
Bresenham画线算法的详细介绍p
+=dobDy;
Bresenham画线算法的详细介绍}

Bresenham画线算法的详细介绍else
Bresenham画线算法的详细介绍Bresenham画线算法的详细介绍{
Bresenham画线算法的详细介绍PointY
++;
Bresenham画线算法的详细介绍p
+=dobD;
Bresenham画线算法的详细介绍}

Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍cout
<<"Point:X:"<<PointX<<"Y:"<<PointY<<endl;
Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍}

Bresenham画线算法的详细介绍}

Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍
intmain()
Bresenham画线算法的详细介绍Bresenham画线算法的详细介绍
{
Bresenham画线算法的详细介绍
//绘画线段(2,2)点到(60,50)需要的点
Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍Bresenham(2,2,60,50);
Bresenham画线算法的详细介绍
Bresenham画线算法的详细介绍
return0;
Bresenham画线算法的详细介绍}

Bresenham画线算法的详细介绍