美文网首页计算机图形学学习
直线段的扫描转换算法 1.DDA

直线段的扫描转换算法 1.DDA

作者: clihen | 来源:发表于2017-08-04 23:35 被阅读17次

用有限像素点表示无限点的直线。

用离散像素点去逼近直线,需要知道像素点的坐标。

求过P0(x0,y0),P1(x1,y1)的直线段方程

y = kx +b;

k = (y1-y0)/(x1-x0) ; (x1 != x0)

假设x已知,从x的起点x0开始,沿x方向前进一个像素(步长为1),即可求出相应的y值。 因为像素的坐标是整数,所以y值要做取整处理。

如(1.7 , 0.8) ---取整---> (1 , 0)  

(1.7 , 0.8) --- +0.5 --->(2.2 , 1.3) ---取整 --->(2 , 1);

直线在计算机中是最基础的图形,一个动画或者真实感图形往往需要调用大量的画直线程序,因此直线算法的好坏与效率将直接影响图形的显示速度与质量。

回顾算法 : y = kx + b ,需要做一次乘法,一次加法和一次取整处理。在计算机中,最快的是加法运算,为了提高效率,减少计算量,关键就是如何把乘法取消。

三个著名的 直线绘制的常用算法:1,数值微分法(DDA) 2.中点画线法  3.Bresenham算法

数值微分法(Digital Differential Analyzer):

引进了图形学一个很重要的思想——增量思想

假设(xi , yi) (x i+1 ,y i+1) 都在直线上,  因为x是递增的,每次递增的量为1,所以

所以                                  y i+1 = yi + k  

这个式子含义就是,当前步的y值等于前一步的y值加上斜率k 。

这样就把原来的一个乘法和一个加法 变成了 一个加法 。

DDA示例

注意斜率问题(k<1)

改进效率 y i+1 = yi + k     ,每步只做一个加法,如何改进?

1.一般情况下y,k都是浮点数,每一步运算都需要对y进行四舍五入再取整,改进途径:把浮点运算变成整数加法。

2.现在是用斜截式表示直线,用其他的式子来表示直线方程?

相关文章

  • 计算机图形学算法-光栅图形学

    直线段的扫描转换算法(一) 1.1 直线段扫描转换算法概述: 光栅显示器屏幕上的直线核心方法:用离散像素点逼近直线...

  • 直线段的扫描转换算法 1.DDA

    用有限像素点表示无限点的直线。 用离散像素点去逼近直线,需要知道像素点的坐标。 求过P0(x0,y0),P1(x1...

  • 图形学1:图形生成算法

    这是图形学期末复习攻略噢 一、图形生成算法 直线段扫描转换:(DDA算法、Bresenham画线算法、中点画线法)...

  • OpenGL:直线扫描转换

    直线扫描转换 在显示器上用最逼近直线的像素点来表示直线 1.DDA画线法 思想:即数值微分法,Digitical ...

  • 算法实现

    在Unity中实现的算法, 1.DDA 2.中点画线法 3.Bresenham算法 git链接:https://g...

  • 10.线段树(比较高级的数据结构)

    一、线段树(区间树)的概念 Segment Tree;线段树属于高级数据结构,经常出现在算法竞赛中为什么要使用线段...

  • 数据结构与算法-线段树

    数据结构与算法-线段树 图片来自慕课网,liuyubobobo讲师的课程“玩转数据结构 从入门到进阶” 线段树介绍...

  • 算法笔记 - 线段树

    线段树的实现比较简单 时间复杂度 O(nlogn) 传统线段树一般用递归实现 线段树可以实现区间数值修改O(log...

  • Java 算法 - 约翰的生意(线段树)

    题意 样例 1.解题思路   这是一道非常典型的线段树题。之前我也做过类似的题,Java 算法-区间求和I(线段树...

  • Java 算法-线段树的修改

      首先说明一下,看这个博客之前,最好有线段树的基本概念,比如说线段树的构造、线段树的查询之类的。最近在学习ANd...

网友评论

    本文标题:直线段的扫描转换算法 1.DDA

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