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

计算机图形学实验报告.docVIP

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

计算机图形学实验报告

学生姓名:

学号:

2011年11月27日

实验一基本图元的生成

一、实验目的与实验要求:

1、目的与任务:学习并掌握图形处理的数学模型和算法。

2、实验基本要求:

(1)利用所学算法原理(DDA、中点画线、Bresenham),编程绘制生成直线,并比较各种算法的差别。所用算法不限定哪种,但不能直接利用编程语言中的画线命令。

(2)分别利用所学算法原理(中点画圆、Bresenham画圆),编程绘制圆。所用算法不限定哪种,但不能直接利用编程语言中的画圆命令。

二、实验原理

1、生成直线的DDA(DigitalDifferentialAnalyzer)方法

算法的基本思想是利用直线的微分方程来确定直线上的点的坐标。无论光栅显示器或绘图机都可以看成有一个网格存在。表示一条直线,就是要用靠近直线的一些网格点来代表这一直线。显示时要使这些点发出一定亮度。

设直线的起点坐标Ps(xs,ys),终点坐标为Pe(xe,ye),令Δx=xe-xs,Δy=ye-ys,

要绘的直线的微分方程是:(1.1)

令Δt=max(|Δx|,|Δy|)(1.2)

取时间步长为1/Δt,则可得式(1.1)的数值解的递推公式

xi+1=xi+Δx/Δt,yi+1=yi+Δy/Δt(1.3)

用式(1.3)可求得图中直线PsPe上三角形表示的点,但显示时要用象素(即图中网格结点)来表示,这要用舍入的办法来找到最靠近三角形表示的点的象素,用这些象素(图中圆表示的点)来表示直线。这个方法称为DDA方法。

P

Ps

Pe

图1.1图中圆点表示DDA法生成的直线

2、Bresenham生成圆弧的算法

本算法的核心是每一步在平面的网格上寻找最接近于实际圆周的点,Bresenham圆弧算法是最有效的算法之一。不失一般性,我们可以假设圆心(xc,yc)就在原点。否则只需要把求到的圆上的点(x,y)作一下平移变换即可。

x’=x+xc,y’=y+yc

便可得到圆心在(x,y)的圆上的点(x’,y’)。

我们只须讨论图1.2中的弧AB的画法,如果要显示一个整圆时,只须在显示AB上任一点(x,y)时,同时显示在圆周上其他七个对称点。

A

A

B

(x,y)

(y,x)

(y,-x)

(x,-y)

(-x,y)

(-y,x)

(-y,-x)

(-x,-y)

45°

图1.2七个对称点

现在从A点开始向右下方逐点来寻找弧AB要用的点。如图1.3中点Pi-1是已选中的一个表示圆弧上的点,根据弧AB的走向,下一个点应该从Hi或者Li中选择。显然应选离AB最近的点作为显示弧AB的点。

假设圆的半径为R,显然,当xi2+yi-12-R2≥R2-(xi2+(yi-1-1)2)时,应该取Li。否则取Hi。

令di=xi2+yi-12+xi2+(yi-1-1)2-2R2(1.4)

显然,当di≥0时应该取Li。否则取Hi。

P

Pi-1

Hi

Li

图1.3应取Hi还是取Li

剩下的问题是如何快速的计算di。设图1.3中Pi-1的坐标为(xi-1,yi-1),则Hi和Li的坐标为(xi,yi-1)和(xi,yi-1-1)。易知

x0=0,y0=R,x1=x0+1,y1=y0-1

因此

d1=x12+y02+x12+(y0-1)2-2R2=3-2y0=3-2R(1.5)

di=xi2+yi-12+xi2+(yi-1-1)2-2R2

=2xi2+2yi-12-2yi-1-2R2+1(1.6)

di+1=xi+12+yi2+xi+12+(yi-1)2-2R2

=(xi+1)2+yi2+(xi+1)2+(yi-1)2-2R2

=2xi2+4xi+2yi2-2yi-2R2+3(1.7)

当di0时,点Hi被选中,这时,yi=yi-1,则

di+1=di+4xi+2(1.8)

当di≥0时,点Li被选中,这时,yi=yi-1-1,则

di+1=di+4(xi-yi)+2(1.9)

三、实验程序设计

#includegraphics.h

#includestdio.h

voiddda(int

文档评论(0)

爱分享的达人 + 关注
实名认证
文档贡献者

爱分享

1亿VIP精品文档

相关文档