图形学笔记1——直线段扫描转换算法

本文介绍了直线段的扫描转换算法,包括基本的直线画法及其优化,如中点画线法和Bresenham算法。通过减少浮点运算,提升效率,适合硬件实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
DDA

已知过端点P0x0, y0, P1 (x1, y1)的直线段; 直线斜率k = (y1-y0) / (x1-x0) .

画线过程为: x的左端点x0开始,向x右端点 步进,步长=1(像素),按y=k x + b 计算相应的y坐标,并去像素点(x, round (y) )作为当前点的坐标。

可以提高效率:

设步长为Δx x i+1 = xi +Δx, 于是: yi+1=kxi+1 +b = kxi + kΔx +b= yi +kΔx

当Δx=1时, yi+1 = yi +k 这样计算每一点,只需做一次加法运算。

note:

round (y) = int (y+0.5) K>1时,必须把x, y的地位互换:y增加1x相应增加1/k

缺点:由于yk须用浮点数表示,每一步都要对y进行四舍五入后取整,使得该算法不利于硬件实现。

 

改进 

目标:进一步将一个加法改为一个整数法加。

 

中点画线法:

通过观察发现,在画线段的过程中,当前像素点为(xp, yp),下一个像素点有两种选择P1xp+1, yp)和P2xp+1, yp+1)。若M=xp+1, yp+0.5)为P1P2之间中点。Q为理想直线与x = xp +1垂线的交点。 则当MQ的下方时,P2为下一个像素点;当MQ的上方时,应取P1为下一点。(如下图)

https://p-blog.youkuaiyun.com/images/p_blog_youkuaiyun.com/touzani/303255/o_middle.JPG

对直线段Lp0x0, y0, p1(x1, y1) ),采用方程

F (x, y ) = ax+by+c = 0 表示,其中 a = y0 – y1,

b = x1 - x0 ,  c = x0y1 – x1y0

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值