直线软光栅算法之DDA(Digital Differential Analyzer)直线微分法

03-04 419阅读 0评论

直线微分法软光栅

  • 1.关于光栅化
  • 2.关于DDA算法(只讨论直线斜率 k>=0并且直线两端点x不相等的情况)
  • 3.对于斜率 k=0并且直线两端点x不相等的情况)

    一种根据直线微分算法生成光栅化离散点的过程

    给定直线两端坐标P0(x0, y0), P1(x1, y1),可以得到直线微分方程

    dy / dx = (y1 - y0) / (x1 - x0) = k

    在知道直线起点坐标的情况下,就可以得到构成直线一系列点坐标

    假定当前点坐标Pi(0, 0), 那么下一个点的像素坐标就是Pi1(1, 0 + k),

    每画一个点x累加1,y累加k,但是k是小数,还需要对y进行取整

    用伪代码写出来就是

    float y = pos1_.y();
    int x = pos1_.x();
    do {
    	draw_point(QPoint(x, (int)roundf(y)));
    	x += 1;
    	y += k;
    } while (x 1 与 1 >= k >= 0 的情况分别处理

    对于k>1的情况

    假定当前点坐标Pi(0, 0), 那么下一个点的像素坐标就是Pi1(0 + 1 / k, 1)

    也就是y累加1,x累加1/k,同样也需要对x进行取整

    伪代码表示

    float x = pos1_.x();
    int y = pos1_.y();
    do {
    	draw_point(QPoint((int)roundf(x), y));
    	y += 1;
    	x += 1.0f / k;
    } while (y 

免责声明
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明。
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所
提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何
损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在
转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并白负版权等法律责任。

手机扫描二维码访问

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,419人围观)

还没有评论,来说两句吧...

目录[+]