目录 上一页 下一页 下一章

-252- PC机汇编语言实战精解

点就更麻烦一些,当2ΔY'+ΔY'+2ΔY'-2ΔX'>ΔX'时其ΔY值是大于1/2的。从这样一个判断的过程中我们能近一步发现在计算ΔY时真正需要累加的既不是"K",也不是"ΔY'",而是"2ΔY'"。

图9-5 决定最近点的算法
  对于图中这条直线,线上各点有如表9-2这样的计算结果:
表9-2 决定最近点的计算实例ΔY'=2,ΔX'=5,2ΔY'=4,2ΔX'=10
2ΔY'的累加值累加值与ΔX'比较实际点的坐标值累加值调整
A0(0,0)
B0+4=44<5(1,0)
C4+4=88>5(2,1)8-10=-2
D-2+4=22<5(3,1)
E2+4=66>5(4,2)6-10=-4
F-4+4=00<5(5,2)
  通过以上计算,我们清楚地看到当表中第三栏内出现">"时,实际所画点的Y坐标值都加上了1,同时2 Y 的累加值根据2 X 作了相应调整。而在整个过程之中X坐标值始终都是递增的。
  这个画线算法是由一位名为Bresenham的程序员首创,因此这个算法被命名为Bresenham算法。因为" 2"的操作可以由左移位代替,所以在这个算法中实际上是没有乘法、除法运算的,因而这个算法十分快速,这是其最突出的优点,也是它长盛不衰的原因。
  程序LOVE.ASM演示了Bresenham直线算法的一种应用,这个程序有些复杂,它将屏幕中央连续画6个封闭的多边形,由这些多边形组成一个图案。
LOVE.ASM
start_x
start_y
data
assume
dotbuff


equ
equ
segment
ds:data
dw
dw

100
0


26h
48h,09h,42h,0dh,3ch,11h,

;起点X坐标
;起点Y坐标


;第一部分总的点数
37h,14h,31h,16h,29h,18h,28h,19h,2eh,1ah

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章