直线扫描转换算法DDA算法(数值微分算法)

数值微分算法(Digital Differential Analyzer,简称DDA):一种直接从直线的微分方程生成直线的方法。

首先,我们通过给定直线的两端点坐标 P 0 ( x 0 , y 0 ) {P_0}({x_0},{y_0}) P0(x0,y0) P 1 ( x 1 , y 1 ) {P_1}({x_1},{y_1}) P1(x1,y1),可以得到直线的微分方程:

d y d x = y 1 − y 0 x 1 − x 0 = k \frac{d_y}{d_x}=\frac{{y_1}-{y_0}}{{x_1}-{x_0}}=k dxdy=x1x0y1y0=k

DDA算法的原理:直线的一阶导数是连续的,而且Δy与Δx是成一定比例的 因此我们可以通过将当前位置的坐标在每个方向上增加一定的增量来确定下一个点的位置。

这就涉及到了增量算法:在一个迭代算法中,如果每一步的x,y值是前一步的值加上一个增量来获得的,则称为增量算法。

在这里插入图片描述
这里x,y方向的增量分别为:€Δx和€Δy

其中€的值是一个无穷小的数(int?float?),这里不太确定。当€无穷小时,可以获得一个精度无限高的直线。因为设备的精度有限,我们常取€= 1 m a x ( Δ x , Δ y ) \frac{1}{max({Δ_x,Δ_y})} max(Δx,Δy)1

这样呢,可以使得 € Δ x , € Δ y {€Δ_x,€Δ_y} Δx,Δy有一个取值总为1,算法在最大位移方向上每次走一步(即增加一个像素,单位步长)。

最大位移方向(根据斜率k确定):

设一直线 y = 3 x + 1 y=3x+1 y=3x+1,斜率 k k k大于1。我们比较一下 x x x方向走1步和 y y y方向走1步的不同
x x x方向:
x 1 = x 0 + 1 {x_1}={x_0}+1 x1=x0+1
y 1 = y 0 + 3 ∗ 1 {y_1}={y_0}+3*1 y1=y0+31
也就是说 x x x方向走了1个步长单位,而 y y y方向走了3个单位步长
y y y方向:
x 1 = x 0 + 1 / 3 {x_1}={x_0}+1/3 x1=x0+1/3
y 1 = y 0 + 1 {y_1}={y_0}+1 y1=y0+1
y y y方向走1个单位步长的时候, x x x方向只走了 1 / 3 1/3 1/3个单位步长。

显然当x方向走1个单位步长的时候,点和点之间的距离会比较大。因此,我们这里选择的最大位移方向位y方向。

所以,我们在DDA算法中要考虑两种情况:

  • 情况一:
    ∣ k ∣ > 1 |k|>1 k>1 Δ y > Δ x {Δ_y}>{Δ_x} Δy>Δx,€= 1 / Δ y 1/{Δ_y} 1/Δy,此时 y y y方向为最大位移方向
    x i + 1 = x i + 1 / k {x_{i+1}}={x_i}+1/k xi+1=xi+1/k,这里要再对 x i + 1 + 0.5 {x_{i+1}}+0.5 xi+1+0.5取整或者直接四舍五入取整。
    y i + 1 = y i + 1 {y_{i+1}}={y_i}+1 yi+1=yi+1
  • 情况二:
    ∣ k ∣ < 1 |k| < 1 k<1 Δ x > Δ y {Δ_x}>{Δ_y} Δx>Δy,€= 1 / Δ x 1/{Δ_x} 1/Δx,此时 x x x方向为最大位移方向
    x i + 1 = x i + 1 {x_{i+1}}={x_i}+1 xi+1=xi+1
    y i + 1 = y i + k {y_{i+1}}={y_i}+k yi+1=yi+k,这里要再对 y i + 1 + 0.5 {y_{i+1}} + 0.5 yi+1+0.5取整或者直接四舍五入取整。

DDA算法的特点:

DDA算法是一个增量算法,每一点的坐标都可由前一个点的坐标加上1个增量求得。

优点:算法直观,易实现

缺点:有浮点数和浮点运算,取整运算,效率并不高。

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值