直线的生成算法

本文介绍了直线生成算法在光栅显示器上的应用,重点讲述了DDA(数字微分分析)和Bresenham算法的原理与实现。DDA算法通过递归式计算直线上的每个像素点,适合快速生成直线。Bresenham算法避免了除法和浮点运算,仅使用整数加减和移位操作,速度更快,特别适合硬件实现。
摘要由CSDN通过智能技术生成

在光栅显示器的荧光屏上生成一个对象,实质上是往帧缓存寄存器的相应单元中填入数据。画一条从(x1, y1)到(x2, y2)的直线,实质上是一个发现最佳逼近直线的象素序列,并填入色彩数据的过程。这个过程也称为直线光栅化。

直线的DDA算法

DDA是数字微分分析式(Digital Differential Analyzer)的缩写。设直线之起点为(x1y1),终点为(x2y2),则斜率m为:

m = (y2-y1)/(x2-x1)=dy/dx


   直线中的每一点坐标都可以由前一点坐标变化一个增量(
Dx, Dy)而得到,即表示为递归式:

xi+1=xi+Dx

yi+1=yi+Dy

并有关系:Dy = m · Dx

递归式的初值为直线的起点(x1, y1),这样,就可以用加法来生成一条直线。具体方法是:

 

2.1.1 直线方向的8个象限

           200742801.JPG                                  

                                                        

2.1.1

象限

|dx|>|dy|?

D x

D y

1a

1b

2a

2b

3a

3b

4a

4b

Ö

´

Ö

´

Ö

´

Ö

´

1

1/m

-1

-1/m

-1

-1/m

1

1/m

m

1

m

1

-m

-1

-m

-1

按照直线从(x1y1)到(x2y2)的方向不同,分为8个象限(图 2.1.1 )。对于方向在第1a象限内的直线而言,D x=1D y=m。对于方向在第1b象限内的直线而言,取值Dy=1,<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值