对称DDA算法实现:
对称DDA直线生成算法是在DDA算法的基础上,引入N变量,
直线方程表示为:dx/dn=△x/△N,
dy/dn=△y/△N
其解为:
x0=xa+0.5 xn=xn-1+△x/△N 其中 △x=xb-xa,
y0=ya+0.5 yn=yn-1+△y/△N △y=yb-ya 。
基本思想是通过移位来实现坐标点的计算。
问题是如何选择N,使直线生成的速度和质量最好?
要求1/2<Max(△x/N,△y/N)≤1
令:N=2INT(log2Max(△x,△y))+1
因为:2log2Max(△x,△y)<N=2INT(log2Max(△x,△y))+1≤2log2Max(△x,△y)+1
Max(△x,△y)<N<2Max(△x,△y)
所以:1/2≤max(△x/N,△y/N)<1
对称DDA算法特点:
优点:
算法简单,尤其适用实现,因为它无乘除,只有移位操作
缺点:
在同一坐标上可能连续停留两次,但不可能连续停留三次
对称DDA实例:
用对称DDA算法在起为A(2,1),终点B(12,7)之间生成一段直线。
1. 求解得△x=10,△y=6, N=16
2.计算过程
index | 计算坐标 | 显示坐标 |
0 | (2+0.5,1+0.5) | (2,1) |
1 | (3.125,1.875) | (3,1) |
2 | (3.75,2.25) | (3,2) |
3 | (4.375,2.625) | (4,2) |
4 | (5.0,3.0) | (5,3) |
5 | (5.625,3.375) | (5,3) |
6 | (6.25,3.75) | (6,3) |
7 | (6.875,4.125) | (6,4) |
8 | (7.5,4.5) | (7,4) |
9 | (8.125,4.875) | (8,4) |
10 | (8.75,5.25) | (8,5) |
11 | (9.375,5.625) | (9,5) |
12 | (10,6) | (10,6) |
13 | (10.625,6.375) | (10,6) |
14 | (11.25,6.75) | (11,6) |
15 | (11.875,7.125) | (11,7) |
16 | (12.5,7.5) | (12,7) |
17 | ||
18 |