DDA算法--计算机图形学

DDA算法

1.直线方程:笛卡尔斜率截距方程 y=mx+b。
通过转换得到对于任何沿直线给定的x增量δx,对应的y增量δy
δy=m
δx(1.1)
同样,可以得出对应于指定的δy的x增量δx
Δx=δy/m(1.2)
对于具有斜率绝对值|m|<1的直线,可以设置一个较小的水平偏转电压δx,对应的垂直偏转电压可以通过(1.1)来定;而对于斜率值|m|>1的直线,则设置一个较小的垂直偏转电压δy,对应的水平偏转电压则由(1.2)计算出来的δx来设定;对于斜率m=1的直线,δx=δy,因为水平偏转和垂直偏转电压相等。在每一种情况下,都可以在指定的断电间生成一条斜率为m的光滑直线段。
解释:当|m|<1的时候,δy<δx,此时δy的较小,误差较大。所以通过提供δx来求δy,同理当|m|>1的时候,δx<δy,此时δx较小,误差较大。

2.DDA算法:线段扫描转换算法,基于(1.1)(1.2)来计算δx或δy。在一个坐标轴上以单位间隔对线段取样,从而确定另一个坐标轴上靠近先路径的对应整数值。
(1)假如斜率的绝对值小于等于1,并且起始点在左侧,则以单位x间隔(δx=1)取样,并逐个计算每一个y值
yk+1=yk+m。
下标k取整数值,从第一个点1开始递增知道最后的断电。由于m可以是0与1之间的任意实数,所以计算出的y值必须取整
(2)对于具有大于1的正斜率线段,则交换x和y的位置。也就是以点位y间隔(δy=1)取样,顺序计算每个x值
Xk+1=Xk+1/m;
此时,每一个计算出的x值要沿y扫描线舍人到最近的像素位置
(3)处理方向相反,即起始端点在右侧,那么δx=-1,并且
yk+1=yk+m。
(4)当斜率大于1的时候,起始端点在右边
Xk+1=Xk+1/m;

算法可以概括为一下的过程:输入线段两个端点的像素位置。端点位置间水平和垂直的差值赋给参数dx和dy。绝对值大的参数确定参数steps的值。该值也是在即将画出的这条线段上的像素数目;按照这个数值,沿线段路径计算每一步的下一个像素位置。先绘制位置(x0,y0)的像素,然后调整每一步的x和y,获得并逐一绘制余下的像素。假如dx的绝对值大于dy的绝对值,且x0小于xEnd,那么x和y方向的增量值分别为1和m。加入x方向的比较大,单x0大于xEnd ,那么就采用减量-1和-m来生成线段上的每个点。在其他情况下,y方向使用单位增量(或减量),x方向使用1/m的增量(或减量)。

参考资料《计算机图形学第四版》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值