快捷搜索:

Bresenham高效画线算法

画线的算法不少,但要作到高速、简单并不轻易。斜率相乘法是最简单的措施之一,但谋略每个点均要花费不少光阴用于乘、除法运算;下面先容的是Bresenham's高效画线算法,对每个点的坐标谋略只要加、减法就能完成。

简化算法用伪Pascal说话描述如下:

procedure DrawLine(x1, y1, x2, y2: Integer);

var

x, y, DeltaX, DeltaY, HalfX, ErrorTerm, i: Integer;

begin

DeltaX := x2 - x1;

DeltaY := y2 - y1;

HalfX := (x2 - x1) shr 1;

ErrorTerm := 0;

x := x1;

y := y1;

for i:=0 to DeltaX do

begin

Plot(X, Y);

Inc(x);

ErrorTerm := ErrorTerm + DeltaY;

if ErrorTerm>HalfX then

begin

ErrorTerm := ErrorTerm - DeltaX;

Inc(y);

end;

end;

end;

为方便涉猎,上述法度榜样作了简化。实际法度榜样应略作修正,以分手处置惩罚DeltaX与DeltaY对照大年夜小, 需要时互换肇端、停止点等。

修正后的的伪Pascal算法如下:

procedure DrawLine(x1, y1, x2, y2: Integer);

var

x, y, DeltaX, DeltaY, HalfCount, ErrorTerm, i, Flag: Integer;

begin

DeltaX := x2 - x1;

DeltaY := y2 - y1;

if Abs(DeltaY)HalfCount then

begin

ErrorTerm := ErrorTerm - DeltaX;

y := y + Flag;

end;

end;

end

else

begin

if DeltaYHalfCount then

begin

ErrorTerm := ErrorTerm - DeltaY;

x := x + Flag;

end;

end;

end;

end;

您可能还会对下面的文章感兴趣: