通过学习《Hearn&Backer.Computer Graphics with OpenGL》 实现画线算法
一、直线方程
直线的笛卡尔斜率截距方程:
y=m∗x+b y = m ∗ x + b
斜率为m,截距为b
在端点(x0,y0)和(xend,yend)之间的线段:
根据两个端点的x和y值可以得到计算斜率和截距的公式:
m=yend−y0xend−x0 m = y e n d − y 0 x e n d − x 0
b=y0−m∗x0 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>=m>0)
此时以单位x间隔(δx=1)取样,并计算每一个y值
yk+1=yk+m y k + 1 = y k + m
斜率为正,且大于1 (m>1)
此时以单位x间隔(δy=1)取样,并计算每一个x值
xk+1=xk+1m x k + 1 = x k + 1 m
斜率为负,且大于等于-1 (-1<=m<0)
此时以单位x间隔(δx=-1)取样,并计算每一个y值
yk+1=yk−m y k + 1 = y k − m
斜率为负,且小于-1 (m<-1)
此时以单位x间隔(δy=-1)取样,并计算每一个x值
xk+1