| 查看: 323 | 回复: 0 | |||
| 当前主题已经存档。 | |||
sdlj8051金虫 (著名写手)
|
[交流]
Bresenham高效画线算法
|
||
|
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) if DeltaX<0 then begin i := x1; x1 := x2; x2 := i; i := y1; y1 := y2; y2 := i; DeltaX := x2 - x1; DeltaY := y2 - y1; end; if DeltaY<0 then Flag := -1 else Flag := 1; DeltaY := Abs(DeltaY); HalfCount := DeltaX 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>HalfCount then begin ErrorTerm := ErrorTerm - DeltaX; y := y + Flag; end; end; end else begin if DeltaY<0 then begin i := x1; x1 := x2; x2 := i; i := y1; y1 := y2; y2 := i; DeltaX := x2 - x1; DeltaY := y2 - y1; end; if DeltaX<0 then Flag := -1 else Flag := 1; DeltaX := Abs(DeltaX); HalfCount := DeltaY shr 1; ErrorTerm := 0; x := x1; y := y1; for i:=0 to DeltaY do begin Plot(X, Y); Inc(y); ErrorTerm := ErrorTerm + DeltaX; if ErrorTerm>HalfCount then begin ErrorTerm := ErrorTerm - DeltaY; x := x + Flag; end; end; end; end; [ Last edited by 幻影无痕 on 2006-11-16 at 07:30 ] |
» 猜你喜欢
能否申诉?
已经有4人回复
有多少人是今天查系统知道结果的?
已经有19人回复
找导师
已经有7人回复
售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急
已经有4人回复
售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急
已经有5人回复
售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急
已经有4人回复
售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急
已经有6人回复
有没有仍没收到信息的
已经有7人回复
国社科又开始会评了,不知道这次命运如何
已经有4人回复
售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急
已经有8人回复









回复此楼
投票:
10