计算机图形学实教程.doc

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

计算机图形学实验教程 信息科学与工程系 实验名称 实验一 直线生成算法 实验二 圆的生成算法 实验三 椭圆的生成算法 实验四 多边形填充算法 实验五 二维图形的几何变换 实验六 常用曲面和曲线的生成算法 实验七 常用消隐算法 实验八 曲线和曲面算法的应用 实验九 真实感图形生成 实验一、直线生成算法 数值微分法 (DDA画线算法) (DDA-Digital Differential Analyzer (设直线两端点为:P1(x1,y1)及 P0(x0,y0), (则直线斜率为 则直线方程为 当 k1 , x每增加1,y 最多增加1(或增加小于1)。 当 k1 ,y每增加1,x 最多增加1 (或增加小于1) 。 DDA算法: 复杂度:加法+取整 优点:避免了y=kx+b 方程中的浮点乘法,比直接用点斜式画线快 缺点:需浮点数加法及取整运算,不利于硬件实现. 上机实验一 题目:编写用DDA画线算法画线算法的程序。 要求: 1。写出DDA画线算法的基本思想和公式。并叙述其优缺点。 2。编写用DDA画线算法的程序。并比较其结果。 3。写出上机报告 中点画线法 (设0k1 中点M在直线下方,下一点取p1点 中点M在直线上方取p2点 中点算法: 用整数加法及比较代替了DDA中的浮点数加法及取整运算,效率大大提高. 直线方程: F(x,y)=ax+by+c=0 直线将二维空间划分为三个区域: 如F(x,y)=0, 则(x,y) 在直线上 如F(x,y)0, 则(x,y)在直线下方 如F(x,y)0, 则(x,y)在直线上方 条件: a= -(y1-y0) b=(x1-x0) c= -B(x1-x0) 设(x0,y0)和(x1,y1)分别为直线的两端点 Dy=y1-y0, Dx=x1-x0 由 y=kx+B 及k=Dy/Dx, k∈[0,1] 得: y=(Dy/ Dx).x+B Dy.x-Dxy+Dx.B=0 则直线一般方程为: F(x,y)=Dy.x- Dx.y+B. Dx=0 a= Dy, b= -Dx,c= B.Dx 设 (x,y) 为直线上一点,将点P=(x,y+?m)代入直线 方程: F(x,y+m)= Dy.x-Dx.(y+m)+B.Dx= (Dy.x-Dx.y+B. Dx)-Dx.m =F(x,y)-Dx.m = -Dx.m 因为Dx0 if m 0(即P点在直线上方) then F(x,y+yb)0; if m0 (即P点在直线下方) then F(x,y+yb)0; 定义决策变量: d= F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+c 如果 d0,则M在理想直线上方,选正右方E点 如果 d0,则M在理想直线下方,选右上方NE点 如果 d=0,则M在理想直线上,选E/NE点 由于d是xi和yi的线性函数k?[0,1],可采用增量计算数提高运算效率. 1.如由pi点确定在是正右方E点(d0).,则新的中点M仅在x方向加1,新的d值为: dnew=F(xi+2,yi+0.5)=a(xi+2)+b(yi+0.5)+c 而 dold=F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+c dnew=dold+a= dold-dy 2.如由pi点确定是右上方NE点(d0),则新的中点M在x和y方向都增加1,新的d值为 dnew=F(xi+2,yi+1.5)=a(xi+2)+b(yi+1.5)+c 而 dold=F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+c dnew=dold+a+b= dold-dy+dx 在每一步中,根据前一次第二迭中计算出的d值 的符号,在正右方和右上方的两个点中进行选择. d的初始值: d0=F(x0+1,y0+0.5)=F(x0,y0)+a+b/2=a+b/2=-dy+dx/2 F(x0,y0)=0 (x0,y0) 在直线上 为了消除d的分数,重新定义 F(x,y)=2(ax+by+c) 则每一步需要计算的dnew 是简单的整数加法 dy=y1-y0 dx=x1-x0 d0=-2dy+dx dnew=dold-2*dy 当 dold=0 dnew=dold-2(dy-dx) 当dold0 Bresenham画线算法 与DDA算法相似, Bresenham画线算法也要在每列象素中找到与

文档评论(0)

xll805 + 关注
内容提供者

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

1亿VIP精品文档

相关文档