直线的扫描转换-中点线算法推导
2010-01-15 14:57
344 查看
无数次的把这个算法忘掉,还是重新记录一下的好
通过斜截式y=dy/dx+B 其中dy=y1-y0, dx=x1-x0, 导出直线隐式函数F(x,y)=dy*x-dx*y+dx*B=0
可知对直线下方的点F(x,y)为正,直线上方的点为负
对下一步将要选择的垂直方向上相邻的两像素NE与E,其中点为M,当前选择了的像素坐标为(xp,yp)
则M为F(xp+1,yp+1/2),只需判断此函数的符号即可决定选择NE或者E
设判定变量d=F(xp+1,yp+1/2), d>0时选择下方像素E,d<0时选择上方像素NE,d=0时皆可
现考察d的变化方式,根据本次的选择NE还是E而不同
1)选择E时,M沿x方向上递增一步
dnew=F(xp+2,yp+1/2)
dold=F(xp+1,yp+1/2)
所以dnew=dold+dy
2)选择NE时,M沿x和y方向上都递增一步
dnew=F(xp+2,yp+3/2)
dold=F(xp+1,yp+1/2)
所以dnew=dold+dy-dx
d的初始值:dstart=F(x0+1,y0+1/2)=dy-dx/2
为消除d的小数,需消除除法运算,将F(x,y)乘以2,即F(x,y)=2(dy*x-dx*y+dx*B) 于是所有的增量同样乘以2,即2dy和2(dy-dx)不影响结果
通过斜截式y=dy/dx+B 其中dy=y1-y0, dx=x1-x0, 导出直线隐式函数F(x,y)=dy*x-dx*y+dx*B=0
可知对直线下方的点F(x,y)为正,直线上方的点为负
对下一步将要选择的垂直方向上相邻的两像素NE与E,其中点为M,当前选择了的像素坐标为(xp,yp)
则M为F(xp+1,yp+1/2),只需判断此函数的符号即可决定选择NE或者E
设判定变量d=F(xp+1,yp+1/2), d>0时选择下方像素E,d<0时选择上方像素NE,d=0时皆可
现考察d的变化方式,根据本次的选择NE还是E而不同
1)选择E时,M沿x方向上递增一步
dnew=F(xp+2,yp+1/2)
dold=F(xp+1,yp+1/2)
所以dnew=dold+dy
2)选择NE时,M沿x和y方向上都递增一步
dnew=F(xp+2,yp+3/2)
dold=F(xp+1,yp+1/2)
所以dnew=dold+dy-dx
d的初始值:dstart=F(x0+1,y0+1/2)=dy-dx/2
为消除d的小数,需消除除法运算,将F(x,y)乘以2,即F(x,y)=2(dy*x-dx*y+dx*B) 于是所有的增量同样乘以2,即2dy和2(dy-dx)不影响结果
相关文章推荐
- 直线扫描转换算法-中点画线法
- 计算机图形学 学习笔记(一):概述,直线扫描转换算法:DDA,中点画线算法,Bresenham算法
- 直线的扫描转换算法
- 图形学_椭圆扫描转换_中点椭圆算法
- 计算机图形学基础 : 基本图形生成算法之直线的扫描转换
- 计算机图形学——直线的三种扫描转换算法
- 直线扫描转换(DDA画线算法)
- 【图形学】直线扫描算法之---bresenham改进算法(任何斜率,任何方向)
- 计算机图形学——直线扫描转换基本增量法
- 直线生成算法---中点画线法
- 多边形扫描转换-X-扫描线算法
- 「图形学」直线扫描——Bresenham算法改进了中点Bresenham算法?
- 计算机图形学之光栅图形学——多边形的扫描转换算法简介
- Bresenham直线扫描算法
- 【Computer Graphics】2.直线生成算法(中点画线 算法)
- 光栅图形学——直线段的扫描转换算法
- 图形生成算法:多边形的扫描转换与区域填充算法
- 计算机图形学:多边形的扫描转换算法(有详细代码)
- 多边形的扫描转换算法
- 直线的扫描转换