美文网首页
图形学1:图形生成算法

图形学1:图形生成算法

作者: susu2016 | 来源:发表于2016-06-18 21:41 被阅读384次

    这是图形学期末复习攻略噢

    一、图形生成算法

    直线段扫描转换:(DDA算法、Bresenham画线算法、中点画线法)

    圆弧扫描转换:(Bresenham画圆算法、中点画圆算法)

    考一道大题,题目类型为给出一条直线或圆画图。(这是老师说的)

    习题:

    使用直线扫描方法绘制点P(0,0)到P(8,5)的直线段,分别使用如下方法绘制。1)DDA画线; 2)Bresenham画线;3)中点画线

    答案见 "第二次作业答案.doc"

    DDA

    输入:起始点(x0,y0)、终点(x1,y1)
    求斜率:m=(y1-y0)/(x1-x0)
    for (x=x0; x≤x1, x++)
    {   setpixel(x, int(y+0.5));
        y=y+m;
    }
    

    解题技巧:
    先写第一列和第三列,第一列为自然数,第三列为等比数列。将第三列取整得到第二列。

    注意:
    当|m|>1时,必须把x,y地位互换, y每增加1,x相应增加1/m。

    DDA算法缺点:
    在此算法中,y、m必须是float,且每一步都必须对y进行舍入取整,不利于硬件实现。

    Bresenham画线算法

    |m|<1时的算法:

    1. 输入线段的两个端点,并将左端点存储在(x0, y0)中。

    2. 画第一个点

    3. 计算
      p0=2Δy-Δx

    4. 从k=0开始,在沿线路径的每个xk处,进行两个步骤地判断:

    5. 重复步骤4, 共Δx次

    #解题技巧:

    首先计算几个常量。在斜率为正时,d的变化趋势是:d大于0,y加d减,d小于0,y不变d加。

    中点画线算法

    假设直线方程为:F(x,y)=ax+by+c=0

    欲判断M点是在Q点上方还是在Q点下方,只需把M代入F(x,y),并检查它的符号。

    算法步骤:

        d0=2(a+0.5b)
        若d≥0, 增量为2a ,y不变
        若d<0,增量为2(a+b), y加1
    

    解题技巧:

    1. 注意b要大于零,否则结果会反过来
    2. 计算初始d时记得乘2
    3. 解题时首先计算常量2a和2(a+b),这两个数一正一负。当直线斜率为正时,d为正,y不变 d减小,d为负,y加1 d增加。

    中点画圆

    算法步骤

    • d<0 上点

    • d>=0 下点

        初始化: d=1.25-R、x=0、y=R
        绘制点(x,y)及其在八分圆中的另外七个对称点
        if d<0 
            d=d+2x+3 (x,y)->(x+1,y)
        if d>=0 
            d=d+2(x-y)+5 (x,y)->(x+1,y-1)
        x<y 结束
      

    解题技巧:

    1. d的递推公式可以自己推出来
    2. 把握好y和d的增减趋势,所有情况一律为d正则减,d负则加,可以作为验算根据。

    (未完待续)

    相关文章

      网友评论

          本文标题:图形学1:图形生成算法

          本文链接:https://www.haomeiwen.com/subject/znhbdttx.html