(3)直线的生成之数值微分法(DDA)

基本图形生成原理:是指在点阵输出设备(如显示器或打印机)上,如何快速地确定一个最佳逼近于理想图形的像素集,并用指定颜色把这些像素显示出来,该过程也被称为图形的扫描转换。‘’


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;
	}
}


  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值