计算机图形学基础 : 基本图形生成算法之直线的扫描转换

本文介绍了计算机图形学中的三种基本直线生成算法——数值微分法(DDA)、中点画线法和Bresenham算法。这些算法在3D图形渲染和游戏开发中起到关键作用,特别是用于光栅化过程。文章重点关注斜率在0~1之间的直线,对于其他斜率的处理也进行了简要说明。
摘要由CSDN通过智能技术生成

学习了三种常用的直线扫描转换算法 :数值微分法(DDA)、中点画线法和Bresenham画线算法.

注 : 本文中的程序都是假定斜率在0~1之间,其他斜率类似,做相应的简单处理就好


数值微分法(DDA,  Digital Differential Analyzer)

直线扫描转换最简单的方法是先算出直线的斜率: 
k = △y / △x
△x = x1 - x0,△y = y1 - y0, (x0, y0)和(x1, y1)是线段的两个端点坐标。然后从线的起点开始,确定最近逼近于直线的y坐标。假设端点坐标都为整数,让x从起点开始到终点,步增为1,计算对应的y坐标,y = kx + B,并取像素(x, round(y))。用这种方法可行、直观,但是效率很差,因为 每步运算都需要一个浮点乘法和一个舍入运算
yi+1 = kxi+1 + B
= k(xi + △x) + B
= kxi + B + k△x
= yi + k△x
因此,当△x = 1时,有yi+1 = yi + k,每当x步增1,y递增k。
DDA算法程序为:

int round(float a) { return int(a + 0.5); }

void DDAline(int x0, int y0, int x1, int y1, int color)
{
	int x;
	float dx, dy, k, y;
	dx = x1 - x0;
	dy = y1 - y0;
	k = dx / dy;
	y = y0;
	for (x = x0; x <= x1; ++x)
	{
		DrawPixel(x, round(y), color);	
		y = y + k;
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值