直线生成算法---对称DDA

对称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  

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值