光栅图形学

3.1 直线段的扫描转换算法:

3.1.1 概述

直线段的扫描转换:

        确定最佳逼近于该直线的一组像素,并且按扫描线顺序,对这些像素进行写操作。


3.1.2 数字微分分析法(Digital Differential Analyzer):

基本方法:

        解直线的微分方程,求解出一个斜率k = dy/dx。

        其有限差分近似解:

                y下标i+1 = y下标i + y的增量;

                y的增量 = k*x的增量。

基本步骤:

        1、计算斜率k。

        2、计算y(i+1) = y(i) + k*x的增量。

                当x的增量 = 1;y(i+1) = y(i) + k。

                即:当x每递增1,y递增k。

                注:上述算法仅适用于abs(k)的值小于1的情形;当abs(k)>1必须把x,y地位互换。

算法描述(伪代码):

if abs(x2-x1) >= abs(y2-y1) then
    Length = abs(x2 - x1)
Else
    Length = abs(y2 - y1)
End if
x的增量为 = (x2 - x1)/Length
y的增量为 = (y2 - y1)/Length
x = x1 + 0.5
y = y1 + 0.5
i = 1
While(i <= Length)
Setpixel(int(x), int(y))
x = x + x的增量
y = y + y的增量
i = i+1
End while
Finsh

解释:

        Length为x2-x1与y2-y1中最大的那个值,为什么x的增量要写成(x2-x1)/Length,当Length = (x2 - x1)时,x每次增一,反之,每次增k。这样便实现了一个算法对两种情况的处理。

        x = x1 + 0.5,与int(x)结合实现取整。

        i——循环控制条件。

缺点:

1、取整运算;

2、浮点计算。


3.1.3 中点画线法:

基本思想:

        当前像素点为(xp,yp)。下一像素点为P1或P2。设M = (xp+1,yp+0.5),为p1与p2之中点,Q为理想直线与x = xp+1垂线的交点。将Q与M的y坐标进行比较。

        当M在Q下方时,P2为下一个像素点;M在Q的上方,应取P1为下一点。

基本步骤:

        对于直线段L,其起点Ps(x0,y0),终点Pe(x1,y1)

        构造判别式:d = F(M) = F(xp+1,yp+0.5) = a(xp+1) + b(yp+0.5) + c;

        a = y0 - y1;b = x1 - x0; c = x0y1 - x1y0.

        d<0时:M在下方,则P2为下一像素点;

        否则,P1为下一像素点。

        d是xp,yp的线性函数,因此可采用增量计算,提高计算效率。

        当d>=0时,d1 = d+a,增量为a;

        当d<0时,d2 = d+a+b,增量为a+b。

        d的初值为 a+0.5b。

        可乘2来摆脱小数。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江弦凤歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值