画线算法——DDA和Bresenham

本文介绍了计算机图形学中的两种画线算法:DDA(Digital Differential Analyzer)和Bresenham算法。详细阐述了直线方程、DDA算法的四类情况以及Bresenham算法在斜率小于1和大于1的情况下的计算过程,提供了相应的算法代码实现。
摘要由CSDN通过智能技术生成

通过学习《Hearn&Backer.Computer Graphics with OpenGL》 实现画线算法

一、直线方程

直线的笛卡尔斜率截距方程:

y=mx+b y = m ∗ x + b

斜率为m,截距为b

在端点(x0,y0)和(xend,yend)之间的线段:

这里写图片描述
根据两个端点的x和y值可以得到计算斜率和截距的公式:
m=yendy0xendx0 m = y e n d − y 0 x e n d − x 0
b=y0mx0 b = y 0 − m ∗ x 0

通过沿直线的x的增量δx,可以计算出对应y的增量δy:

δy=mδx δ y = m ∗ δ x

同理,通过沿直线y的增量δy,可以计算出对应x的增量δx:

δx=δym δ x = δ y m

二、DDA

DDA(digital differential analyzer)算法,在一个坐标轴上对线段以单位间隔取样,计算另一坐标轴上最靠近线段的对应整数值。

根据斜率m的取值范围,一共可以分为4种情况:

  1. 斜率为正,且小于等于1 (1>=m>0)

    此时以单位x间隔(δx=1)取样,并计算每一个y值
    

yk+1=yk+m y k + 1 = y k + m

  1. 斜率为正,且大于1 (m>1)

    此时以单位x间隔(δy=1)取样,并计算每一个x值
    

xk+1=xk+1m x k + 1 = x k + 1 m

  1. 斜率为负,且大于等于-1 (-1<=m<0)

    此时以单位x间隔(δx=-1)取样,并计算每一个y值
    

yk+1=ykm y k + 1 = y k − m

  1. 斜率为负,且小于-1 (m<-1)

    此时以单位x间隔(δy=-1)取样,并计算每一个x值
    

xk+1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值