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

在数学上,直线就是由无穷多个点组成的, 在计算机屏幕显示的话, 需要做一些处理,对于光栅显示器

光栅显示器上就是用有限多个点去逼近直线, 那么这些有限个点,我们需要知道每一个像素点的坐标(都是整数)

求P0, P1的直线方程

y= kx + b

斜率为

       (y1 - y0)
k = ---------------   (x1 != x0)(x2 - x0)

假设 x 已知, 即从x的起点x0开始, 沿x方向 前进一个像素, (步长为1) ,就可以计算出y的值
因为像素都是整数值, 所以求出的y值还要进行整数处理

那么问题就转换成了, 如何 把数学上的一个点, 扫描转换成一个屏幕像素点
比如 p (1.7, 0.8) -> p (1, 0) 或者 p(1.7, 0.8) -> +0.5 -> p (2.2, 1.3) -> p(2, 1)

直线是最基本的图形, 一个动画或真实感图形往往需要调用成千上万次画线程序, 因此直线算法的好坏与效率直接影响图形的质量与速度

因为直线方程是 y = kx + b
为了提高效率, 把计算量减下来, 关键问题是如何把乘法取消

2. DDA直线算法

DDA算法引进图形学忠一个很重要的思想 ------增量思想

这个直线是
yi = k xi + b 那么x (i+1) 也满足该式子

y(i+1) = k x(i+1) + b 又因为 x(i+1) = xi + 1, 所以

y(i+1) = k (xi + 1) + b 小括号打开就是

y(i+1) = k xi + k + b 移项

y(i+1) = k xi + b + k = yi + k 到这里就相当于 y的变化就是x每移动一格, y就移动k单位,也就是斜率

所以我们每移动一次x轴, y轴就可以移动k个单位,这样就省去了乘法运算,大大提高了效率

如下所示的例子

k = 3 / 5 = 0.6 < 1
y(i+1) = yi + k
我们从(0, 0) 这个点开始, 每次x加一, y就加0.6 那么x = 1的时候, y = 0.6, 然后进行取整运算,
结果如下表

x y int(y+0.5)
0 0 0
1 0 + 0.6 1
2 0.6 + 0.6 1
3 1.2 + 0.6 2
4 1.8 + 0.6 2
5 2.5 + 0.6 3

当然以上的办法只适合画斜率小于1 的直线,如果斜率大于一, 那么我们需要把x和y对调顺序进行计算, 计算完再换过来

计算机图形学 之 DDA直线算法(数值微分法)相关推荐

  1. 计算机图形学01:直线生成算法(DDA算法)

    作者:非妃是公主 专栏:<计算机图形学> 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成.--曾国藩 文章目录 专栏推 ...

  2. 计算机图形学之生成直线的DDA算法(C#)

    计算机图形学DDA直线算法(C#) 一.直线的生成算法 实质上是一个发现最佳逼近直线的象素系列,并填入彩色数据的过程. 二.DDA算法 一种基于直线的微分方程来生成直线的一种方法. 三.DDA代码程序 ...

  3. matlab dda算法,dda直线算法生成.pdf

    dda直线算法生成 数学与计算科学学院 实 验 报 告 实验项目名称 线的生产 所属课程名称 计算机图形学 实 验 类 型 验证型 实 验 日 期 2015-4-13 班 级 信计 12-2 学 号 ...

  4. 计算机图形学直线线型实验报告,计算机图形学实验报告-直线中点bresenham算法的实现资料.doc...

    计算机图形学实验报告-直线中点bresenham算法的实现资料.doc (10页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 29.90 积分 计算机图形 ...

  5. 计算机图形学直线算法论文,《计算机图形学》中直线生成算法的教学心得

    摘要:<计算机图形学>是计算机科学与技术专业一门重要的专业课,其中直线生成算法是教学重点之一.该文通过分析几种直线生成算法的特点,阐述了理论教学和实践教学的重点和难点,总结了教学的体会和心 ...

  6. 计算机图形学E2——OpenGL Bresenham算法画直线

    其他计算机图形学实验见 链接 要求 使用Bresemham算法画直线,并且通过鼠标可以实现交互操作 参考代码: 代码1 代码2 代码3(代码好理解) 代码4(讲解很全面) #include<io ...

  7. 计算机图形学学习(一) 直线Bresenham算法讲解及matlab实现

    文章目录 Bresenham算法介绍 Bresenham算法实现 matlab代码实现 成果演示 最后 Bresenham算法介绍 Bresenham是计算机图形学领域使用最广泛的直线扫描转换算法,其 ...

  8. 【计算机图形学 】Cohen-Sutherland 直线裁剪算法 | OpenGL+鼠标交互

    文章目录 其他计算机图形学实验 前言 代码借鉴 步骤 1.点的结构体 2. 创建用于裁剪的窗口并绘制 3.画点函数 4. Cohen-Sutherland 直线裁剪算法部分 4.1 判断点所在位置,生 ...

  9. 计算机图形学椭圆_椭圆算法| 计算机图形学

    计算机图形学椭圆 椭圆的性质 (Properties of ellipse) Ellipse is defined as the locus of a point in a plane which m ...

最新文章

  1. Java之父接受Evrone专访:您需要的软件可靠性越高,静态类型语言的帮助就越大...
  2. 单一docker主机网络
  3. weblogic 12c 一键静默建域、集群、受管,计算机以及添加受管到集群
  4. c语言程序解决生活中的问题作文,生活中烦恼的事五年级满分作文
  5. hashmap为什么容量是2的n次方
  6. mongo 时间格式化 查询_MongoDB中查询转换(将时间戳转变通用日期格式)
  7. Socket通信---网络通信学习笔记(一)
  8. linux网络编程之socket:使用fork并发处理多个client的请求
  9. 5·19网络故障:DNS服务器被攻击
  10. composer安装Workerman报错:Installation failed, reverting ./composer.json to its original content....
  11. python Pandas文件读写
  12. ef 子表和父表不同时保存_canon粉不懂镜头参数?我只能嘲笑你
  13. mvc html的扩展,asp.net mvc - 使用Razor声明性视图中的MVC HtmlHelper扩展
  14. 华为网络技术比赛-note(2018)
  15. 小区广播背景音乐系统IP网络广播解决方案
  16. Halcon学习(7):颜色识别
  17. VMWare安装Deepin系统
  18. oracle 当前owner,如何在Oracle中找到对象的OWNER?
  19. Android 二维码扫描(仿微信界面),根据Google zxing
  20. Work Like Alibaba系列分享回顾整理(含演讲幻灯片、视频):持续更新中

热门文章

  1. 【基础】Flink -- Time and Window
  2. 喜欢捣蛋的无符号类型
  3. 受Intel的CPU缺货影响,联想在笔记本市场跌至全球第三?
  4. Android SmsManager 短信群发
  5. farpoint Spread 常用事件
  6. 九龙证券“医美茅”拟大手笔分红,多家机构密集关注!机构最青睐两大行业
  7. key筛选 redis_利用redis实现多属性快速查询
  8. 基于python和era再分析风场的的风玫瑰图制作
  9. 笔记本Ubuntu18.04-盒盖休眠解决办法
  10. java escapexml_fn:escapeXml()函数