《绘制任意斜率的直线》由会员分享,可在线阅读,更多相关《绘制任意斜率的直线(15页珍藏版)》请在人人文库网上搜索。

1、淮海工学院计算机工程学院 实验报告书 课程名: 计算机图形学 题 目: 绘制任意斜率的直线 班 级: 测绘121 学 号: 2012122827 姓 名: 王其芳 评语: 成绩: 指导教师: 批阅时间: 年 月 日 一、实验目的或要求 1. 掌握任意斜率直线的绘制算法。 2. 掌握直线中点Bresenham算法的基本原理,能够用VC+实现该算法。 二、 实验内容 掌握直线段的生成算法,并用C+实现算法,包括中点法生成 、1直线。 2、编程实现DDA算法、Bresenham算法、中点画线法绘制直线段 实验代码 三、 算法DDA1、生成直线的算法思想:一个坐标轴上以单位间隔增量,决定另一个坐标轴上。

2、最靠近线段路径的对应整数值。假定x2x1的绝对值大于y2y1的绝对值,取x为一个象素单位长,即x 每次递增一个象素,然后利用下式计算相应的y值:yk+1ykyykmx 对于|m|1的线段,可通过计算由Y方向的增量y引起的改变来生成直线: xk+1xkxxkmy 生成直线的DDA算法思想是源用初中直线的方程得出来的,而生成直线的中点算法是通过将DDA算法的方程式改为隐函数形式,然后通过与中点的比较确定该取的像素,绘制图线。 /* DDA */ #include void linedda(int x0,int y0,int x1,int y1,int color) int x,dy,dx,y; f。

3、loat m; dx=x1-x0; dy=y1-y0; m=dy/dx; y=y0; for(x=x0;x #include / 四舍五入 int Round(float x) return (int)(x abs(y2 - y1) ? abs(x2 - x1) : abs(y2 - y1); x = (float)x1; y = (float)y1; cx = (float)(x2 - x1) / steps; cy = (float)(y2 - y1) / steps; for(int i = 0; i #include / 使用 Bresenham 算法画任意斜率的直线(包括起始点,不包。

4、括终止点) void Line_Bresenham(int x1, int y1, int x2, int y2, int color) int x = x1; int y = y1; int dx = abs(x2 - x1); int dy = abs(y2 - y1); int s1 = x2 x1 ? 1 : -1; int s2 = y2 y1 ? 1 : -1; bool interchange = false; / 默认不互换 dx、 dy if (dy dx) / 当斜率大于 1 时,dx 、dy 互换 int temp = dx; dx = dy; dy = temp; in。

5、terchange = true; int p = 2 * dy - dx; for(int i = 0; i = 0) if (!interchange) / 当斜率 1 时,选取左右象素点 x += s1; p -= 2 * dx; if (!interchange) x 为步长时,选取当斜率 x += s1; / 1 时,选取 y 为步长 p += 2 * dy; / 主函数 void main() initgraph(640, 480); / 测试画线 Line_Bresenham(10, 100, 100, 478,BLUE); Line_Bresenham(10, 478, 638。

6、, 1, RED); / 按任意键退出 getch(); 运行结果如下: 、生成直线的中点算法3 算法思想:根据递推关系来判断利用已知或以求出的点,中点算法主要是利用椭圆的正负划分性, 下一个点的位置。转化为可加的数,m浮点运算效率低下的问题,将直线的斜率中点算法有效地消除了DDA使之成为被图形软件这样使得中点算法的效率大大提高,然后通过中点来确定要选择的点, 广泛采用的算法之一。 代码如下: #include #include / 使用中点算法画任意斜率的直线(包括起始点,不包括终止点)void Line_Midpoint(int x1, int y1, int x2, int y2, in。

7、t color) int x = x1, y = y1; int a = y1 - y2, b = x2 - x1; int cx = (b = 0 ? 1 : (b = -b, -1); int cy = (a 1 d = 2 * b + a; d1 = 2 * b; d2 = 2 * (a + b); while(y != y2) if(d 0) d += d1; else x += cx, d += d2; y += cy; putpixel(x, y, color); / 主函数 void main() initgraph(640, 480); / 测试画线 Line_Midpoint。

8、(100, 50, 100, 478, GREEN); Line_Midpoint(1, 478, 638, 1, BLUE); / 按任意键退出 getch(); 四、实验结果 1、 该程序实现了三种算法的直线段绘制 2、 比较三种算法的结果: 像素逼近效果由好到差依次为:Bresenham算法、DDA算法、中点算法 执行速度由快到慢依次为: 中点算法、DDA算法、Bresenham算法 五、实验分析与体会 通过此次实验我对计算机图形学有了实际的认识,计算机图形学对我们的生活有很多的益处。学习之后我知道了计算机图形学是研究怎样利用计算机来显示,生成和处理图形的原理,方法和技术的一门学科。虽然一开始有些许不懂和茫然,但是经过老师的指导,我还是完成了这次的实验。 (注:专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。可复制、编制,期待你的好评与关注)。

c语言 绘制任意斜率的直线,绘制任意斜率的直线相关推荐

  1. Bresenham算法实现任意斜率直线绘制

    参考<计算机图形学> Donald.Hearn 书中给出了斜率k在0-1之间的推导过程 在k>=1时以y方向为单位步长递增,此时有x=(y-b)/b; d(low)=x-x(k)=( ...

  2. 图形学(2)光栅图形学的直线绘制(上)

    本模块内容绝大部分是在慕课上看中国农业大学网客时的笔记,因此算作转载,在此鸣谢赵明.李振波两位老师,感谢他们录制该门课程供大家学习! 光栅图形学 为适应光栅显示器,需发展一套和他相适应的算法来处理.显 ...

  3. 图形学(3)光栅图形学的直线绘制(下)

    本模块内容绝大部分是在慕课上看中国农业大学网客时的笔记,因此算作转载,在此鸣谢赵明.李振波两位老师,感谢他们录制该门课程供大家学习! Bresenham算法 前两种算法把效率提高到了整数加法级别,只讲 ...

  4. 直线绘制算法-Bresenham算法

    该算法相较于其他直线绘制算法摆脱了直线方程式的使用,通过换元的思想实现整数加法的迭代. 一.Bresenham算法 前提条件k∈[0,1],直线在x方向上每次增量为,在y方向上每次的增量为.通过一个变 ...

  5. R语言ggplot2可视化:使用ggplot2绘制按时间顺序排列的时间线图(chronological timeline plot)

    R语言ggplot2可视化:使用ggplot2绘制按时间顺序排列的时间线图(chronological timeline plot) 目录 R语言ggplot

  6. R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(添加箱图、带缺口的小提琴图、小提琴图)实战

    R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(添加箱图.带缺口的小提琴图.小提琴图)实战 目录 R语言使用ggplot2包geom_jit ...

  7. R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(颜色配置:连续色彩、离散色彩、色彩梯度)实战

    R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(颜色配置:连续色彩.离散色彩.色彩梯度)实战 目录 R语言使用ggplot2包geom_ji ...

  8. R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(自定义色彩、形状)实战

    R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(自定义色彩.形状)实战 目录 R语言使用ggplot2包geom_jitter()函数绘制分 ...

  9. R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(双分类变量分组:色彩配置、形状配置)实战

    R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(双分类变量分组:色彩配置.形状配置)实战 目录 R语言使用ggplot2包geom_jitt ...

最新文章

  1. python global函数_如何使用python语言中的global关键字获取函数值
  2. 21天学MySQL_把整个Mysql拆分成21天,轻松掌握,搞定(下)
  3. 3D打印攻破无人车激光雷达,这个奇怪的盒子它看不见
  4. 做网络推广时网站结构要如何进行优化呢?
  5. [译]GPU加持,TensorFlow Lite更快了
  6. 【Android 安全】DEX 加密 ( Application 替换 | 获取 ContextImpl、ActivityThread、LoadedApk 类型对象 | 源码分析 )
  7. linux系统下ntp网络时钟服务器(NTP服务器)的搭建和使用
  8. springboot整合netty
  9. ORA-01157 无法标识锁定数据文件的解决方法
  10. 在阿里云上遇见更好的Oracle(四)
  11. Apache Tomcat漏洞总结
  12. 【机器学习】线性回归(最小二乘法实现)
  13. RPLIDAR A1激光雷达学习笔记
  14. C语言实现 输入两个正整数m和n,求其最大公约数和最小公倍数【学习笔记】
  15. 能安装Chrome扩展和油猴脚本的手机浏览器
  16. JME 3 入门教程 3 - Hello Assets
  17. 内存溢出(Memory Overflow)和内存泄露(Memory Leak)的区别
  18. 判断图有无环_21考研有机化学打卡第四题——芳香性判断
  19. VirtualBox网络之仅主机(Host-Only)网络
  20. scp或者ssh报错“no matching host key type found. Their offer: ssh-rsa,ssh-dss“

热门文章

  1. 对话NASA传奇宇航员:太空中不止有未知与神秘,还有下午茶和电影
  2. 口碑问答营销推广如何做?广告联盟同样需要
  3. wdcp 安装及问题解决
  4. 新GSP质量文件——21个岗位职责
  5. PyQt_QMessageBox
  6. 唯品会OAuth api_sign
  7. 群聊太多?三步教你用 Python 自动监听转发群消息!
  8. sai椭圆尺子等比例放大或者缩小
  9. android4.4.2小游戏,安卓模拟器4.4.2内核之上的穹顶之战 夜神1.1.3版本到来
  10. vbox虚拟机centos网桥模式上网