实验报告_3(最新整理版).docVIP

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

实验报告

(2010-2011学年第二学期)

3D动画和游戏设计算法

(3DDesignAlgorithmsforAnimationandGame)

学生姓名:谭宏同

学号:200830632130

年级,班级:08级2版

成绩:

任课教师签名:

日期:2011-6-8

实验题目:完成分形的Hilbert-Peano曲线的算法

目录:

实验功能描述

该功能用VC++实现Hilbert-Peano的曲线

实验算法描述

使用递归算法将一个初始图元是正方形,在迭代生成的过程中,不断细化出小的正方形,使Hilbert-Peano的曲线得以显示出来

实验程序描述

用到的库函数说明

使用到VC和mfc的一些基本函数。

数据结构描述(包括全局变量、局部变量、数组、结构、文件、类等)

程序函数描述(画出函数调用关系、或类继承关系,各函数功能与参数说明等)

除了必要的视窗类函数,下面是实现Hilbert-Peano的曲线的一些主要函数。

voidCTestView::GetMaxX(){

CRectRect;

GetClientRect(Rect);

MaxX=Rect.right;

}

voidCTestView::GetMaxY()

{

CRectRect;

GetClientRect(Rect);

MaxY=Rect.bottom;

//这两个函数是获得屏幕窗口的长和宽的最大值,使所画曲线在屏幕显示范围内。

voidCTestView::PeanoHilbert(intn,ints,doublex1,doubley1,doublex2,doubley2)

{

CClientDCdc(this);

doubledx,dy;

if(n==0)

{

dx=x2-x1;dy=y2-y1;

dc.MoveTo(ROUND(x),ROUND(y));

dc.LineTo(ROUND(x1+dx/4),ROUND(y1+dy/4));

dc.LineTo(ROUND(x1+(2-s)*dx/4),ROUND(y1+(2+s)*dy/4));

dc.LineTo(ROUND(x1+3*dx/4),ROUND(y1+3*dy/4));

dc.LineTo(ROUND(x1+(2+s)*dx/4),ROUND(y1+(2-s)*dy/4));

x=x1+(2+s)*dx/4;y=y1+(2-s)*dy/4;

return;

}

if(s0)

{

PeanoHilbert(n-1,-1,x1,y1,(x1+x2)/2,(y1+y2)/2);//left

PeanoHilbert(n-1,1,x1,(y1+y2)/2,(x1+x2)/2,y2);//up

PeanoHilbert(n-1,1,(x1+x2)/2,(y1+y2)/2,x2,y2);//up

PeanoHilbert(n-1,-1,x2,(y1+y2)/2,(x1+x2)/2,y1);//left

}

else

{

PeanoHilbert(n-1,1,x1,y1,(x1+x2)/2,(y1+y2)/2);//up

PeanoHilbert(n-1,-1,(x1+x2)/2,y1,x2,(y1+y2)/2);//left

PeanoHilbert(n-1,-1,(x1+x2)/2,(y1+y2)/2,x2,y2);//left

PeanoHilbert(n-1,1,(x1+x2)/2,y2,x1,(y1+y2)/2);//up

}

}

//该函数设置一个递归深度n和开口方向s,其中s有两个值-1,1表示开口向左或向上。然后就是根据算法不断细化出小的正方形。举个例子:首先要把它放在一个正方形里来看。把一个正方形等分为四个小正方形,假设是从左下角开始延顺时针方向依次连接四个小正方形中心的线段,接下来,把四个小正方形再次细化,把每一个小正方形再划分为小小正方形,即在每个小正方形中再绘折线,这样,第一级线就成为连接各第二级线的折线,第二级线再不断连接到第N级线,最后就绘制成了复杂的Hilbert-Peano曲线。

心得体会

实现Hilbert-Peano曲线的算法收获是要懂得算法的基本原理和步骤,设置合理的参数,然后才能正确地画出曲线出来。在细化的过程中,在连接一个正方形的4个小正方形的时候,有的时候是顺时针画的,有的时候又是逆时针画的,通过资料的阅读,才知道比如在大正方形中折线是顺时针画的,那么在4个小正

文档评论(0)

132****2812 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档