基本图形生成原理:是指在点阵输出设备(如显示器或打印机)上,如何快速地确定一个最佳逼近于理想图形的像素集,并用指定颜色把这些像素显示出来,该过程也被称为图形的扫描转换。‘’
C 语言提供了一个对显示设备上的像素进行写操作的函数: putpixel (x, y, color);
x 和 y 指定像素的位置坐标
color指定像素的颜色。
数值微分法(简称DDA法)
基本原理:
设k为直线斜率,直线段的两个端点为P1(x1, y1)和P2(x2, y2),对直线上任何给定的x的增量△x和y的增量△y,则有:
△y = k·△x (1式)
或 △x = △y / k (2式)
其中,k = (y2-y1) / (x2-x1)
对于|k|<=1的直线段:
1)若x2>=x1,则x++,y=y+k,取像素点(x, int(y+0.5))
2)否则,x--,y=y-k,取像素点(x, int(y+0.5))
对于|k|>1的直线段:
1)若y2>=y1,则y++,x=x+1/k,取像素点(int(x+0.5), y)
2)否则,y--,x=x-1/k,取像素点(int(x+0.5), y)
注:int(x+0.5)或int(y+0.5)表示对x或y进行四舍五入取整。
例:用DDA法画直线段P1(0, 0)—P2(5, 2),斜率k=0.4
DDA算法的特点:
1、增量算法:用数值方法解微分方程,通过对x和y各增加一个小增量,来计算下一步的x和y值。
2、直观、易实现。
3、缺点:在此算法中,y与k必须是float,而且每一步都必须对y进行舍入取整,不利于硬件实现。
代码(0<k<1):
void DDALine(int x1,int y1,int x2,int y2,int color){
int x;
float k,y=y1;
k=1.0*(y2-y1)/(x2-x1);
for(x=x1;x<=x2;x++){
putpixel(x,(int)(y+0.5),color);
y=y+k;
}
}