计算机图形学习—— 直线段的扫描转换算法
计算机可以使用两种方式来显示图像:
一:点阵文件:又名:取样图像、点阵图像、位图图像。从现实世界中通过数字化设备(扫描仪)获取的图。点阵文件缩放会失真,保存起来占用空间比较大。
主要的参数有1. 图像大小(分辨率):图像分辨率=垂直分辨率(矩阵的行数)X水平分辨率(矩阵的列数)。
2. 颜色空间的类型(颜色模型):指彩色图像所使用的颜色描述方法,指代RGB、YUV等。
3. 像素深度 :像素的所有颜色分量的二进位数之和 一般24位使用3字节表示就可称为真彩色。
常用图像文件格式:bmp/tif/gif/jpeg/jpeg
1. BMP:无损,Windows使用的标准图像格式,几乎所有Windows应用软件都支持
2. TIF:无损,大量用于扫描仪和桌面出版
3.GIF:无损,压缩比可调,文件特别小——颜色数较少(不超过256色),用于色彩数要求不高的场合作为插图、剪贴画等使用,支持透明背景,具有渐进显示功能,形成动画效果,适合网络传输
4. JPEG:大多有损,适用范围最广(国际标准)、可支持有损压缩、主要应用领域之一是数码相机
5.JP2(JPEG 2000):有损/无损,特别采用了小波分析等先进算法,兼容JPEG,压缩率更高,比JPEG好,更适合网上传输
二、矢量文件:使用数学方程,形状参数等。矢量文件中的图形元素称为对象。每个对象都是一个自成一体的实体,它具有颜色、形状、轮廓、大小和屏幕位置等属性。矢量图相比于位图很多优点,可以无限放大或缩小,且不会有任何损失,文件体积较小,编辑灵活。
直线算是计算机图形入门的最最基础的了,就从它入手了!那么在屏幕上如何画出一条直线呢。
由图可以看出我们需要一定的算法来进行选择像素点来保证画出的直线是比较理想的。
当然画出一条直线我们使用数学方程 y = Kx + b.当我们确定两点的坐标很容易计算出斜率K的值跟b的值,然后该改变x的值就能求出y的值,反之依然。
当然一些一些坐标值的整数变化:
p(1.7,0.8)------->取整 p(1,0) 这样误差比较大,我们采用 p(1.7,0.8)------->+0.5 p(2.2,1.3)------->取整 p(2,1)
计算机速度固然很快,可是这样成千上百此的调用速度方面也会略显不足,每次计算要使用乘法还要一次四舍五入,所以我们要改进算法更加高效。有三种改进的方法,此下一一介绍:
一、数值微分法(DDA)是一种基于直线的微分方程来生成直线的方法。
数学推导过程:采用别人的图片,嘿嘿偷懒了!
将乘法转换成加法会极大的增加运算的速度。
void DDA(float x1, float y1, float x2, float y2)//x1,y1起始点,x2,y2终止点
{ int i, temp;
int x0 = 0, y0 = 0; //坐标轴原点
float x, y, delta_x, delta_y, dx, dy;
dx = x2 - x1;
dy = y2 - y1;
if (fabs(dx) >= fabs(dy)) //确定斜率K是正还是负,确定采用x坐标为基准还是Y坐标
temp = fabs(dx); //求出绝对值
else
temp = fabs(dy);
delta_x = float(1.0*dx / temp); //一个值为1.0,一个值小于1.0
delta_y = float(1.0*dy / temp);
x = x1;
y = y1;
putpixel((x + x0), (y0 - y),颜色); //画点
for (i = 1; i <= temp; i++)
{
x = x + delta_x;
y = y + delta_y;
putpixel((x + x0), (y0 - int(y + 0.5)), 颜色); //y+0.5四舍五入运算
Sleep(50); //两个点间隔50毫秒
}
}
二、中点画线法
三、Bresenham算法
下次写---待续
计算机图形学习—— 直线段的扫描转换算法相关推荐
- 【计算机图形学】壹 · 光栅图形学之直线段的扫描转换算法
有两点P0(x0,y0),P1(x1,y1)P_{0}(x_{0},~y_{0}),~P_{1}(x_{1},~y_{1})P0(x0, y0), P1(x1, y1)确定一条线段L(P0 ...
- 计算机图形学直线段的生成算法
计算机图形学直线段的生成算法C++实现,包括:DDA,中点画线,改进的Bresenham画线 文章目录 1.实验目的和内容 1.1实验目的 1.2实验内容 2.算法原理 2.1 DDA(数值微分算法) ...
- 计算机图形学:直线段的生成算法,VS实现数值微分法和中点Bresenham算法
实验要求: 实现直线段生成的两种方法: 1) 数值微分法 和 2) 中点Bresenham算法.用户用鼠标点击两个点,两个点都确定后,利用直线段的绘制算法绘制两个点之间的一条直线段.本文章仅涉及算法的 ...
- 计算机图形学(三):三维图形观察及应用(矩形窗直线段的裁剪算法)
裁剪:使用计算机处理图形信息时,计算机内部存储的图形往往比较大,而屏幕显示的只是图形的一部分.因此需要确定图形哪些部分落在显示区内,哪些落在显示区外.这个选择的过程就称为裁剪. 最简单的裁剪方法是把各 ...
- 计算机图形学 学习笔记(一):概述,直线扫描转换算法:DDA,中点画线算法,Bresenham算法
前言 本笔记基于 http://www.icourse163.org/learn/CAU-45006?tid=1001746004#/learn/announce 感谢中国农大 赵明老师的分享~ 现在 ...
- 计算机图形学直线扫描转论文,计算机图形学实验报告-实验1直线段扫描转换.doc...
PAGE 32 PAGE 7 计算机图形学 实验报告 班级 计算机工硕班 学号 2011220456 姓名 王泽晶 实验一:直线段扫描转换 实验目的 通过本次试验,学生可以掌握直线段的扫描转换算法及其 ...
- 计算机图形学直线裁剪原理,计算机图形学-3.2用Liang-Barsky算法实现直线段裁剪...
计算机图形学-3.2用Liang-Barsky算法实现直线段裁剪 计算机图形学-3.2用Liang-Barsky算法实现直线段裁剪 (1)算法设计原理 依次处理(p1,q1)(p2,q2)(p3,q3 ...
- 【转】 LSD(Line Segment Detector) 直线段检测算法学习~
论文回顾之一 一种新的直线段检测算法---LSD:a Line Segment Detector 原文地址:http://blog.csdn.net/polly_yang/article/detail ...
- 计算机图形学-扫描转换直线段-直线方程法-DDA算法-中点算法-OPENGL实现-详解
扫描转换直线段 说明与环境配置 环境配置 扫描转换直线段 方法一: 直线方程法 代码描述: 算法比较简单, 暂无代码. 方法二: 数字差分分析DDA算法 代码描述: 方法三: 中点算法 代码描述: 所 ...
最新文章
- Redis客户端JetCache的单机版和集群版的配置
- mysql8.0日期类型_MySQL8.0中的日期类数据及其函数
- hdu 5792 World is Exploding 树状数组
- access开发精要(11)-对象命名规定
- 软件工程第一次作业补充
- ACM弱校ACMer A HDU1045Fire Net有感
- Python 网站应用从开发到部署
- 面试字节跳动社招,我工资涨了60%,附带面经
- python下载付费音乐包_python无损音乐下载器下载
- 《嵌入式 – GD32开发实战指南》第4章 GD32启动流程详解(Keil版)
- mac os 录屏快捷键_免费的录屏软件有哪些?不限制时长的录制软件
- 金融二叉树模型-给期权定价
- uniapp 权限判断 判断位置,摄像头,相册,通讯录是否开启,如果没有开启弹窗提示并且进入设置打开权限
- VS2015基础开发流程
- R按比例大小画2个以上的数据的Venn图
- Bootstrap登录页面带验证码
- 通过天眼查查询相关企业信息
- ERP中的财务管理集成
- 读书笔记 - 《斯坦福极简经济学》
- 游戏中的数学与物理(一)