第3章 基本图形的生成

上传人:oq****t 文档编号:1980070 上传时间:2017-07-18 格式:PPT 页数:66 大小:1.07MB
返回 下载 相关 举报
第3章 基本图形的生成_第1页
第1页 / 共66页
第3章 基本图形的生成_第2页
第2页 / 共66页
第3章 基本图形的生成_第3页
第3页 / 共66页
第3章 基本图形的生成_第4页
第4页 / 共66页
第3章 基本图形的生成_第5页
第5页 / 共66页
点击查看更多>>
资源描述

《第3章 基本图形的生成》由会员分享,可在线阅读,更多相关《第3章 基本图形的生成(66页珍藏版)》请在金锄头文库上搜索。

1、第3章 基本图形生成原理,一 光栅扫描: 1 光栅扫描的基本原理: 电子束在荧光屏上按照固定的扫描线和扫描顺序扫出 一个由行和列组成的光的栅网。 2 像素: 栅网中的每一个孤立的光点,它是光栅显示的最小单位。 像素可以有不同的亮度,像素的坐标值都是整数。,概论,3 提出问题,(1)目前使用的图形输出设备显示器:光栅图形显示器(2)光栅图形显示器: 以光栅扫描方式刷新线段、字符和图形。 其本质: 是一种画点设备,是由一定数量的网格状细小光点 (像素)组成,使其某些像素亮,某些像素不亮来显 示图形或文字.(3)问题: 光栅图形显示器是画点设备,而二维图形并不是点的集合, 如何在光栅图形显示器上构造

2、基本二维几何图形(线 圆)?(4)解决方法: 进行图形扫描转换 例: 要在屏幕上显示一条直线时,只能确定出逼近直线的 一组像素, 并按扫描线顺序对这些像素进行写操作,即进行扫描转换。 结果: 使所画的直线转换成为逼近理想直线的由无数个点构成的集合 。 画图形:可使用同样的方法,即进行图形的扫描转换. 使所画的图形转换成为逼近理想图形的由 无数个点构成的集合 。,扫描转换(光栅化): 1 什么叫扫描转换(光栅化)? 在光栅显示器等数字设备上确定一个最佳逼近于图形的象素集的过程 。 2 扫描转换的主要工作: 由于理想的图形是连续的,而光栅图像是离散的,因此显示过程中不可 避免地产生锯齿等畸变, 扫

3、描转换的主要工作就是研究使光栅图像逼近原始的图形的算法。,3 学习扫描转换的目的: (1) 绘图函数具有局限性: 在实际工作中遇到画线的工作时,可以方便地调用程序设计 语言中提供的绘图函数,不需要自己编写画线的程序。 但它由局限性,不能满足用户特殊绘图要求,需要开发出满 足需求的绘图程序。 (2) 学习目的: 掌握将数学的、模拟的、线形的图形变成数字的离散的图形 的过程中的设计思想和方法,这些思想能够在科学研究和产 品开发中发挥作用。,5.1 直线的生成,三 算法要求: 1 准确:扫描点尽可能地逼近理想点。 2 快速:改进算法尽 快提高扫描转换速度。,一 问题的提出: 给定直线两端点P0(x0

4、,y0)和P1(x1,y1), 在光栅显示器上画出该直线。 二 需要进行扫描转换: 给出一个将直线转换为逼近理想直线的点的集合的算法。,2 直线的斜截式方程: y=kx+b by1kx1 x从起点到终点每次增加1,用y=kx+b计算y值, 再用putpixel(x,int(y+0.5),color)输出该像素。 3 该算法的缺点: 画线效率低,每步都需要一个浮点乘法运算和一个 四舍五入运算,需要加以改进。,5.2. 数值微分法(DDA算法 Digital Differential Analyzer ),1 直线的微分方程:,一 数值微分法:是一种基于直线微分方程来生成直线的方法。,二 数值微分

5、法的改进算法(关键:找到Pi(Xi,Yi), Pi+1(Xi+1,Yi+1)的关系),1 推导: 直线方程:y=kx+b 直线上的第i、第i+1个点为:Pi(Xi,Yi), Pi+1(Xi+1,Yi+1), 计算Pi+1 时:x为xi+1, (在第1象限x 总是向右前进一步), y为 y (画水平线时,y的值不变) yi+1(画非水平线时,y的值变化,需要计算) 其中:yi+1的计算为: yi+1=kxi+1 +B =k(xi+x)+B =kxi+kx +B =kxi+B+kx /yi=kxi+B =yi +kx =yi +k /当x的步进为1时 故Pi +1点的坐标为: xi+1=xi+1

6、yi+1=round ( yi+k) /进行取整运算,分析:下一点的y坐标为当前点y 坐标加上斜率k,省略了浮点乘法。,xi+1=xi+1 yi+1=round ( yi+k),数值微分法示意图,2 算法: 1)计算斜率 k=y/x 2)画第1个点(x0,y0) 3)计算下一个点(x,y)的值P, x=x+1, y=y+k 小数部分0.5, 则 y=y+1 循环 小数部分 0.5, 则 y=y 画点(x,y),void ddaline(x0,y0,x1,y1,color)int x0,y0,x1,y1,color; int x; float dx,dy,k,y; dx=x1-x0; dy=y1

7、-y0; k =dy/dx;/计算斜率 y =y0;/设定第1点的y值 for(x=x0;x0 直线下方的点:F(x,y)0 Q在M的下方 (M在直线的上方)则:取P1作为下一个象素, dk = dk =0 Q在M的上 (M在直线的上 ) 则:同上 dk 0 Q在M的上方 (M在直线的下方)则:取P2作为下一个象素,,对每一个象素计算判别式d,根据它的符号判定下一个象素。d是xp,yp的线形函数,可以采用增量计算来提高运算效率。,根据不同情况分析如下:第一种情况:当dk 0时,取正右方的象素p1,下一步则应在p3和p4当中选择, 设它们的中点为M1(xp+2,yp+0.5),则判断式d1为:

8、dk+1=F(M1) =F(xp+2,yp+0.5) =a (xp+2)+b(yp+0.5)+c =a xp+2a +b(yp+0.5)+c =a (xp+1) +b(yp+0.5)+c+a = dk +a下一步的判别式为: dk+1 = dk+1 +a d的增量为a。,第二种情况:当d0时,取正上方的象素p2,下一步则应在p4和p5当中选择, 设它们的中点为M2(xp+2,yp+1.5),则判断式d2为: dk+1=F(M2) =F(xp+2,yp+1.5) =a (xp+2)+b(yp+1.5)+c =a xp+2a +b(yp+1.5)+c =a (xp+1)+a +b(yp+0.5)+c+b = dk+a+b 下一步的判别式为: dk+1 = dk+a+b d的增量为a+b。,初始值,第一个象素为起点(x0,y0),相应的判别式值为M0, 由于起点(x0,y0)在直线上,故F(x0,y0)= 0。 推导:d0=F(M0) =F(x0+1,y0+0.5) =a (x0+1)+b(y0+0.5)+c =a x0+by0+c +a+0.5b =F (x0,y0)+a+0.5b /起点必在直线上, F (x0,y0)=0 = a+0.5b,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号