通过学习《Hearn&Backer.Computer Graphics with OpenGL》 实现画线算法
一、直线方程
直线的笛卡尔斜率截距方程:
y=m∗x+by=m∗x+b
斜率为m,截距为b
在端点(x0,y0)和(xend,yend)之间的线段:
根据两个端点的x和y值可以得到计算斜率和截距的公式:
m=yend−y0xend−x0m=yend−y0xend−x0
b=y0−m∗x0b=y0−m∗x0
通过沿直线的x的增量δx,可以计算出对应y的增量δy:
δy=m∗δxδy=m∗δx
同理,通过沿直线y的增量δy,可以计算出对应x的增量δx:
δx=δymδx=δym
二、DDA
DDA(digital differential analyzer)算法,在一个坐标轴上对线段以单位间隔取样,计算另一坐标轴上最靠近线段的对应整数值。
根据斜率m的取值范围,一共可以分为4种情况:
斜率为正,且小于等于1 (1>=m>0)
此时以单位x间隔(δx=1)取样,并计算每一个y值
yk+1=yk+myk+1=yk+m
斜率为正,且大于1 (m>1)
此时以单位x间隔(δy=1)取样,并计算每一个x值
xk+1=xk+1mxk+1=xk+1m
斜率为负,且大于等于-1 (-1<=m<0)
此时以单位x间隔(δx=-1)取样,并计算每一个y值
yk+1=yk−myk+1=yk−m
斜率为负,且小于-1 (m<-1)
此时以单位x间隔(δy=-1)取样,并计算每一个x值
xk+

本文介绍了计算机图形学中的两种画线算法:DDA(Digital Differential Analyzer)和Bresenham算法。详细阐述了直线方程、DDA算法的四类情况以及Bresenham算法在斜率小于1和大于1的情况下的计算过程,提供了相应的算法代码实现。
最低0.47元/天 解锁文章
6542

被折叠的 条评论
为什么被折叠?



