Bresenham算法

这篇博客详细介绍了Bresenham算法的基本思想和实现步骤,包括如何通过误差项的符号来决定像素的绘制位置。算法从起点到终点按顺序计算与网格线的交点,并进行优化,减少了浮点运算,提高了效率。适用于计算机图形学和图像处理领域。
摘要由CSDN通过智能技术生成

基本思想
按直线从起点到终点的顺序计算直线与和垂直网线格的交点,然会根据误差项的符号确定该列像素中与此点最近的像素。
在这里插入图片描述
误差项的计算:

  1. d0=0;
  2. 每走一步:d(i+1)=di+k(斜率);
  3. y方向+1时,d=d-1;

算法步骤:
4. 输入直线的两个端点p0(x0,y0)和p1(x1,y1).
5. 计算初始值🔺x,🔺y, d=0,x=x0,y=y0;
6.绘制点(x,y);
7.d 更新为d+k,判断d的符号。若d>0.5,则(x,y)更新为(x+1,y+1), 同时d更新为 d-1;否则(x,y)更新为(x+1,y)
8,当直线没有画完时,重复步骤6,7。

算法改进1:
令 e=d-0.5;
e初=-0.5;
每走一步有 e=e+k;
if(e>0) then e=e-1

判断e的符号。若e>0,则(x,y)更新为(x+1,y+1),同时将e更新为e-1; 否则(x,y)更新为(x+1,y);

由于 含有浮点运算(k=🔺x/🔺y)

再次改进:
2e🔺x 代替e
e初=-🔺x
每走一步 e=e+2🔺y;
if(e>0) then e=e-2🔺x;

void line(int x0,int y0,int x1,int y1)
{
	int x,y,dx,dy,e;
	y=y0;
	dx=x1-x0;
	dy=y1-y0;
	e=-dx;
	for(x=x0;x<=x1;x++)
	{
			pDC->Setpixel(x,y,RGB);
			if(e<0){
					e=e+2🔺y;
			}
			else{
					y++;
					e=e-2🔺x;
			}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值