基本图形生成算法
现在学习的是第1页,共64页
一 光栅扫描:
1 光栅扫描的基本原理:
电子束在荧光屏上按照固定的扫描线和扫描顺序扫出
一个由行和列组成的光的点每次增加1,用y=kx+b计算y值,
再用putpixel(x,int(y+),color)输出该像素。
3 该算法的缺点:
画线效率低,每步都需要一个浮点乘法运算和一个
四舍五入运算,需要加以改进。
. 数值微分法(DDA算法 Digital Differential Analyzer )
1 直线的微分方程:
一 数值微分法:是一种基于直线微分方程来生成直线的方法。
现在学习的是第7页,共64页
二 数值微分法的改进算法(关键:找到Pi(Xi,Yi), Pi+1(Xi+1,Yi+1)的关系)
1 推导:
直线方程:y=kx+b
直线上的第i、第i+1……个点为:Pi(Xi,Yi), Pi+1(Xi+1,Yi+1),…
计算Pi+1 时:x为xi+1, (在第1象限x 总是向右前进一步),
y为 y (画水平线时,y的值不变)
yi+1 (画非水平线时,y的值变化,需要计算)
其中:yi+1的计算为:
yi+1=kxi+1 +B
=k(xi+△x)+B
=kxi+k△x +B
=kxi+B+k△x //yi=kxi+B
=yi +k△x
=yi +k //当△x的步进为1时
故Pi +1点的坐标为:
xi+1=xi+1
yi+1=round ( yi+k) //进行取整运算
现在学习的是第8页,共64页
分析:下一点的y坐标为当前点y 坐标加上斜率k,省略了浮点乘法。
Pi +1点的坐标为:
xi+1=xi+1
yi+1=round ( yi+k)
(xi, yi)
(xi+1,(int) (yi+k))
(xi, (int) (yi))
(xi+1, yi+k)
数
值
微
分
法
示
意
图
理想直线上的坐标点
扫描转换后的像素点
现在学习的是第9页,共64页
2 算法:
1)计算斜率 k=△y/△x
2)画第1个点(x0,y0)
3)计算下一个点(x,y)的值P,
x=x+1,
y=y+k 小数部分≥, 则 y=y+1 循环
小数部分< , 则 y=y
画点(x,y)
现在学习的是第10页,共64页
void ddaline(x0,y0,x1,y1,color)
int x0,y0,x1,y1,color;
{
int x;
float dx,dy,k,y;
dx=x1-x0;
dy=y1-y0;
k =dy/dx; //计算斜率
y =y0; //设定第1点的y值
for(x=x0;x<=x1;x++) //x 加1
{ putpixel(x,(int)(y+),color); //画点,y值取整
y=y+k; //计算y的值
}
}
3 程序:
4 分析:
本算法中k值需要使用浮点
基本图形生成算法 来自淘豆网m.daumloan.com转载请标明出处.