Bresenham高效画线算法,第1张

Bresenham高效画线算法,第2张

画线的算法有很多,但要做到高速简单并不容易。斜率乘法是最简单的方法之一,但是对于乘除法来说,计算每个点需要花费大量的时间。下面是Bresenham的高效画线算法,可以通过加减计算出每个点的坐标。
简化算法用伪Pascal语言描述如下:
Procedure Drawline (x1,y1,x2,y2:整数);
var
x,y,DeltaX,DeltaY,HalfX,ErrorTerm,I:Integer;
begin
DeltaX:= x2-x1;
DeltaY:= y2-y1;
HalfX:=(x2-x1)SHR 1;
error term:= 0;
x:= x1;
y:= y1;
for I:= 0 to DeltaX do
begin
Plot(X,Y);
Inc(x);
error term:= error term+DeltaY;
if error term > HalfX then
begin
error term:= error term-DeltaX;
Inc(y);
end;
end;
end;
为了方便阅读,上面的过程已经简化。实际程序应该稍微修改一下,分别处理DeltaX和DeltaY的比较大小,必要时交换起点和终点。
修正后的伪Pascal算法如下:
ProcedureDrawline (x1,y1,x2,y2:整数);
var
x,y,DeltaX,DeltaY,HalfCount,ErrorTerm,I,Flag:Integer;
begin
DeltaX:= x2-x1;
DeltaY:= y2-y1;

if Abs(DeltaY)begin
if DeltaX begin
I:= x1;x1:= x2;x2:= I;
I:= y1;y1:= y2;y2:= I;
DeltaX:= x2-x1;
DeltaY:= y2-y1;
end;
if DeltaY else Flag:= 1;
DeltaY:= Abs(DeltaY);
half count:= DeltaX SHR 1;
error term:= 0;
x:= x1;
y:= y1;

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » Bresenham高效画线算法

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情