直线扫描---Bresenham算法
2010-12-14 14:54
281 查看
计算机扫描直线原理:
直线方程:y=kx+b y-kx-b=0
在第一象限画线 (X0,Y0)->(X1,Y1)
当前点Pi (Xi , Yi)
则下一点必为P1( Xi +1, Yi) 或 P2( Xi +1, Yi+1)。
理想直线靠近哪个点,就取那个点。
推导:
令F(x,y)=y-kx-b,那么理想直线上方有F>0,下方F<0.
取P1 P2中点M(Xi +1, Yi+0.5),
则F(M)<0,M在F下,应该取P2 ;反之取P1 ;
令di=F(Mi)=Yi+0.5-k(Xi +1)-b
则di<0时第i+1个点 Pi+1(Xi +1, Yi+1)
di+1=di+1-k
di>0时 Pi+1(Xi +1, Yi)
di+1=di-k
d0=0.5-k
由以上递推公式可以确定每一个像素点坐标,从而画出直线。
优化(只需要d的符号):
k=Δy/Δx 而一象限Δx为正
2Δxd0=1-2Δy //避免k的除法 0.5的浮点数
2Δxdi+1=2Δxdi+2Δx - 2Δy 或 2Δxdi+1=2Δxdi-2Δy
结论:
重新令d0=1-2Δy
则 di+1=di+2Δx - 2Δy 或 di+1=di-2Δy
由此,该算法优点可以看出:没有除法 只用到整数加减,所以该算法是高效的。
直线方程:y=kx+b y-kx-b=0
在第一象限画线 (X0,Y0)->(X1,Y1)
当前点Pi (Xi , Yi)
则下一点必为P1( Xi +1, Yi) 或 P2( Xi +1, Yi+1)。
理想直线靠近哪个点,就取那个点。
推导:
令F(x,y)=y-kx-b,那么理想直线上方有F>0,下方F<0.
取P1 P2中点M(Xi +1, Yi+0.5),
则F(M)<0,M在F下,应该取P2 ;反之取P1 ;
令di=F(Mi)=Yi+0.5-k(Xi +1)-b
则di<0时第i+1个点 Pi+1(Xi +1, Yi+1)
di+1=di+1-k
di>0时 Pi+1(Xi +1, Yi)
di+1=di-k
d0=0.5-k
由以上递推公式可以确定每一个像素点坐标,从而画出直线。
优化(只需要d的符号):
k=Δy/Δx 而一象限Δx为正
2Δxd0=1-2Δy //避免k的除法 0.5的浮点数
2Δxdi+1=2Δxdi+2Δx - 2Δy 或 2Δxdi+1=2Δxdi-2Δy
结论:
重新令d0=1-2Δy
则 di+1=di+2Δx - 2Δy 或 di+1=di-2Δy
由此,该算法优点可以看出:没有除法 只用到整数加减,所以该算法是高效的。
相关文章推荐
- 计算机扫描直线Bresenham算法
- 「图形学」直线扫描——Bresenham算法改进了中点Bresenham算法?
- 计算机图形学 学习笔记(一):概述,直线扫描转换算法:DDA,中点画线算法,Bresenham算法
- 生成直线的Bresenham算法
- 计算机图形学基础 : 基本图形生成算法之直线的扫描转换
- [计算机图形学] 基于C#窗口的Bresenham直线扫描算法、种子填充法、扫描线填充法模拟软件设计(一)
- [计算机图形学] 基于C#窗口的Bresenham直线扫描算法、种子填充法、扫描线填充法模拟软件设计(二)
- HTML5 Canvas 提高班(二) —— 光栅图形学(2)Bresenham算法画直线
- 直线中点Bresenham算法
- 生成直线的Bresenham算法
- OpenGl中点Bresenham算法画直线
- 直线扫描转换算法-中点画线法
- openGL一之直线DDA,正负法,Bresenham算法,圆弧正负法,Bresenham算法
- 直线扫描转换(DDA画线算法)
- 直线生成算法的实现:分别利用DDA算法、中点Bresenham算法和改进的Bresenham算法扫描转换直线段P1P2
- OpenGl改进Bresenham算法画直线
- 应用Bresenham算法画直线。
- Bresenham算法实现任意斜率直线绘制
- Bresenham算法画直线
- 【CG】Bresenham算法 画直线与圆