DDA算法、中点Bresenam算法,圆或椭圆的绘制

1、调用画点函数,实现任意斜率直线的绘制 (运用DDA算法、中点Bresenam算法实现并比较算法精度与效率)

② 基本论述
DDA算法又称数值微分法,是计算机图形学中一种基于直线的微分方程来生成直线的方法。 原理就是最直观的根据斜率的偏移程度,决定是以x为步进方向还是以y为步进方向。然后在相应的步进方向上,每次增加一个像素,而另一个相关坐标变量则为Y k+1=Y k + m(以x为步进变量为例,m为斜率)
假定直线斜率k在0~1之间,当前象素点为(xp,yp),则下一个象素点有两种可选择点P1(xp+1,yp)或P2(xp+1,yp+1)。若P1与P2的中点(xp+1,yp+0.5)称为M,Q为理想直线与x=xp+1垂线的交点。当M在Q的下方时,则取P2应为下一个象素点;当M在Q的上方时,则取P1为下一个象素点。这就是中点画线法的基本原理
Bresenham算法:过各行、各列像素中心构造一组虚拟网格线,按直线从起点到终点的顺序计算直线各垂直网格线的交点,然后确定该列像素中与此交点最近的像素。该算法的优点在于可以采用增量计算,使得对于每一列,只要检查一个误差项的符号,就可以确定该列所求的像素。

②算法
DDA算法描述:
m =直线的斜率
可通过计算由x方向的增量△x引起y的改变来生成直线:
xi+1=xi+△x
yi+1=yi+△y=yi+△x·m
也可通过计算由y方向的增量△y引起x的改变来生成直线:
yi+1=yi+△y
xi+1=xi+△x=xi+△y/m
以此类推。
中点Bresenam算法描述:
任意给定的两点所绘制的线段斜率k可能有四种情况,分别是:0<k<1,k>=1,-1<k<0,
k<=-1。下面对这四种情况分别进行分析。

(一)  当0<k<1时
   1.算法原理的推导
(1)	构造中点误差项为:
di=F(xM,yM)=F(xi + 1,yi + 0.5)=yi + 0.5 –k(xi + 1) -b
(2)	中点误差的初始值是:
d0=F(x0 + 1,y0 + 0.5)=y0 + 0.5 –k(x0 + 1) -b
=y0 – kx0 – b – k +0.5
其中,因为(x0,y0)在直线上,所以y0-kx0-b=0,则:d0=0.5-k
(3)	推导di+1
a.	当di>=0时;中点在直线上方,取下面的点(x i+1,yi)
di+1 = F(xi+2,yi+0.5)
=yi+0.5-k(xi+2)-b
=di-k
b.	当d<i0时;中点在直线下方,取下面的点(x i+1,yi+1)
di+1 = F(xi+2,yi+1.5)
=yi+1.5-k(xi+2)-b
=di+1 - k
(二)  当k>=1时
   1.算法原理的推导
(1)	构造中点误差项
di=F(xM,yM)=F(xi + 0.5,yi +1)=yi + 1 –k(xi + 0.5) -b
(2)	中点误差的初始值
d0=F(x0 + 0.5,y0 + 1)=y0 + 1 –k(x0 + 0.5) -b
=y0 – kx0 – b –0.5k+1
其中,因为(x0,y0)在直线上,所以y0-kx0-b=0,则:d0=1-0.5k
( 3 )  推导di+1
a.当di>=0时;中点在直线左方,取右方的点(x i+1,yi+1)
di+1 = F(xi+1.5,yi+2)
=yi+2-k(xi+1.5)-b
=di+1-k
b.当d<i0时;中点在直线右方,取左方的点(x i+1,yi+1)
di+1 = F(xi+0.5,yi+2)
=yi+2-k(xi+0.5)-b
=di+1 
(三)当-1<k<0时
1.算法原理的推导
(1)	构造中点误差项
di=F(xM,yM)=F(xi + 1,yi -0.5)=yi - 0.5 –k(xi + 1) -b
(2)	中点误差的初始值
d0=F(x0 + 1,y0 - 0.5)=y0 - 0.5 –k(x0 + 1) -b
=y0 – kx0 – b – k -0.5
其中,因为(x0,y0)在直线上,所以y0-kx0-b=0,则:d0=-0.5-k
( 3 )  推导di+1
a.当di>=0时;中点在直线上方,取下方的点(x i+1,yi-1)
di+1 = F(xi+2.,yi-1.5)
=yi+1.5-k(xi+2)-
  • 4
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值