Bresenham画线算法的详细介绍
Bresenham 画线算法是由Bresenham提出的一种精确而有效的光栅线生成算法,该算法仅仅使用了
整数的增量来实现的。
Bresenham算法将对整形参数的符号检测,整形参数的值比于实际险段之间的偏量。
Bresenham算法内容
对于直线方程 Y = kX + b;
A,0< 斜率 < 1 时候的算法
1,输入线段的两个端点Point1和Point2,并且存储到Point1(x1,y1)和Point2(x2,y2)中;
2,将Point1载入桢缓存,绘画第一个起始点;
3,计算常量△x、△y、2△y和2(△y-△x),并且获得一个决策参数的第一个值:P = 2△y - △x;
4,从n = 0开始,在沿线经过每个Xn处,进行下面的监测:
如果Pn< 0, 下一个点绘制的是(Xn+1,yn),并且Pn+1= Pn + 2△y
如果P0>= 0 ,下一个点绘制的是(Xn+1,Yn+1),并且Pn+1 = Pn + 2(△y-△x)
5,重复执行△x-1次步骤4;
关于在C++中的算法如下实例:
#include<iostream>

usingnamespacestd;

voidBresenham(intx1,inty1,intx2,inty2)

...{
intdx=x2-x1;//△x

intdy=y2-y1;//△y

intp=(2*dy)-dx;//P=2△y-△x

intdobDy=2*dy;//2△y

intdobD=2*(dy-dx);//2(△y-△x)

intPointX,PointY;

//设置两个临时用来显示位置的变量

if(x1>x2)

...{
//判断线段的方向

PointX=x2;//起始坐标X


PointY=y2;/**/////起始坐标Y

x2=x1;

}
else

...{
PointX=x1;//起始坐标X

PointY=y1;//起始坐标Y

}

//达到第一个起始点

cout<<"Point:X:"<<PointX<<"Y:"<<PointY<<endl;

while(PointX<x2)

...{
PointX++;

if(p<0)

...{
p+=dobDy;
}
else

...{
PointY++;
p+=dobD;
}

cout<<"Point:X:"<<PointX<<"Y:"<<PointY<<endl;

}
}


intmain()

...{
//绘画线段(2,2)点到(60,50)需要的点

Bresenham(2,2,60,50);

return0;
}

本文地址:
http://www.45fan.com/a/luyou/67884.html