网站大量收购独家精品文档,联系QQ:2885784924

贵州大学计算机图形学实验报告----直线生成算法.doc

贵州大学计算机图形学实验报告----直线生成算法.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
贵州大学计算机图形学实验报告----直线生成算法

贵州大学计算机图形学实验报告 学院:计算机科学与信息学院 专业: 班级: 姓名 学号 实验组 实验时间 指导教师 成绩 实验项目名称 实验一 直线生成算法 实验目的 通过本实验,了解并掌握在光栅显示系统中直线的生成和显示算法,熟悉相关开发平台。为后继实验打下基础。 实验要求 能够使用DDA数值微分法绘制直线。 能够使用中点画线算法绘制直线。 能够使用Bresenham画线算法绘制直线。 实验原理 一、DDA数值微分法画直线 已知直线段L的起点为P0(x0,y0),终点为P1(x1,y1) 直线的斜率K则为:K=(y1-y0)/(x1-x0).直线的方程为:y = kx+b.则对于|k|=1来说,x每增加1个步长,y增加 k(直线的斜率)。对于|k|1来说,y每增加1个步长,x增加1/k。 分析如下所示: |k|=1的推导过程 yi+1 = kxi+1 + b = k(xi+Δx)+b = kxi+b+kΔx yi+1 = yi+ kΔx Δx = 1 yi+1 = yi+ k |k|1的推导过程 Xi+1 = yi+1/k – b/k = yi/k - b/k +Δy/k Δy = 1 Xi+1 = Xi+1/k DDA算法的分析: 复杂度:加法+取整 优点:避免了y=kx+b 方程中的浮点乘法,比直接用点斜式画线快。 缺点:需浮点数加法及取整运算,不利于硬件实现。 二、中点划线法 假设直线的起点、终点分别为:(X0,Y0),(X1,Y1),直线方程: F(x,y)=ax+by+c=0,其中: a=y0-y1,b=(x1-x0),c=x0y1-x1y0。 如F(x,y)=0, 则(x,y) 在直线上 如F(x,y)0, 则(x,y)在直线下方 如F(x,y)0, 则(x,y)在直线上方 对于|k|=1 假设已确定当前象素点P(Xp ,Yp ),然后确定下一个象素点,即T 或B之一。M为T,B中点,Q为理想直线与栅格线的交点。若M在Q的下方,选T,否则选B。使用直线的正负划分性来判断M和Q的位置关系.构造判别式: d=F(M)=F(xp+1,yp+0.5)=a(xp+1)+b(yp+0.5)+c 当d0,M在L(Q点)下方,取右上方T为下一个象素; 当d=0,M在L(Q点)上方,取右方B为下一个象素; 当d=0,选T或B均可,约定取B为下一个象素 判断了M的位置之后则可以依次的画出各个点,从而得到一条直线。 对于|k|1 d=F(M)=F(xp+0.5,yp+1)=a(xp+0.5)+b(yp+1)+c 当d=0,M在L(Q点)下方,取右上方T为下一个象素; 当d0,M在L(Q点)上方,取右方B为下一个象素; 当d=0,选T或B均可,约定取B为下一个象素 中点划线算法的分析: 优点:用整数加法代替了DDA数值微分法中的浮点数加法及取整运算,大大提高了算法的效率。 缺点:在计算d的符号时,需要做4个加法和2个乘法 改进:因为d是x和y的线性函数,因此可采用增量计算。通过计算可得对于|k|=1的情况d的初值为a+0.5b,当d=0,M在L上方,增量d1为a;当d0,M在L下方,增量d2为a+b。对于|k|1的情况d的初值为0.5a+b,当d=0,M在L下方,增量d1为b;当d0,M在L上方,增量d2为a+b。 三、Bresenham划线算法 该算法是计算机图形学领域中使用最为广泛的直线扫描转换算法,该划线算法类似与中点划线算法,也是由误差项符号决定下一个像素右边点还是右上点。 基本原理:过各行各列像素中心构造一组虚拟网格线,按直线从起点到终点的顺序计算直线与各垂直网格线的交点,然后确定该列像素中与此交点最近的像素。该算法的优点在于增量计算,使得对于每一列只要检查一个误差项的符号,就可以确定该列所求的像素。根据直线的斜率来确定变量在x或y方向递增一个单位。另一个方向y或x的增量为0或1,它取决于实际直线与最接近网格点位置的距离。这一距离称为误差。 由以上原理,为方便计算,令e = d-0.5,e的初值为-0.5,增量为k。当 e=0时,取当前像素(xi,yi)的右上方像素(xi+1,yi+1),e减小1,而当e0时,更接近于右方像素(xi+1,yi)。 Bresenham算法的分析: 优点:高效,巧妙地采用了e = d-0.5,e的初值为-0.5来简化运算,把e和0.5的比较转化成了e和0的比较,使得每次画点只需考虑误差项增量的符号即可。 实验环境 硬件平台:PC机 软 件:Windows平台,eclipse 编程语言:java 实验步骤 掌握三种划线算法的基本原理; 依据划线算法,在eclipse下编写源程序并进行调试; 对运行过程中的错误进行修改; 对运行结果进行

文档评论(0)

wuailuo + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档