计算机分形预案.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机图形学实验报告 姓名 学号 专业 任课教师 实验教师 评阅教师 实验地点 书写日期 20 实验课时间 实验得分 实验序号与名称:计算机分形——Koch曲线 实验目的: 通过实验了解计算机分形和粒子系统实现及其效果 实验开发环境: 硬件要求: PC机,主流配置,最好为独立显卡,显存512M以上。 软件环境: 操作系统:Windows XP。 语言开发工具:Microsoft Visual studio 2008,Visual C++。 实验要求: 用OpenGL实现以下效果之一: 1、 计算机分形? 例如 Julia集 Koch 曲线 2D或3D Sierpinsk三角形 2、粒子系统?? 3、扫描表示法造型?? 并加上一定交互效果 需要提供: 1、源程序及其执行程序? 2、程序设计、实现和操作说明 实验内容与步骤小结、主要截图、核心代码实现: 比例:60% 1、 koch曲线分形原理 从一条直线段开始,将线段中间三分之一部分用等边三角形的两条边代替,形成具有5个结点的图形(图1);在新的图形中,又将图中每一条直线段中间的三分之一部分都用一条等边三角形的两条边代替,再次形成新的图形(图2),这时,图形中共有17个结点。设第k次迭代产生结点数为nk,第k+1次迭代产生结点数为nk+1,则kn和kn+1之间的递推关系式为nk+1 =4*nk -3。 图1 第一次迭代 图2 第二次迭代 2、 算法分析 2.1 koch雪花 在一单位长度的线段上对其三等分,将中间段直线换成一个去掉底边的等边三角形,再在每条直线上重复以上操作,如此进行下去直到无穷,就得到分形曲线Koch曲线。 给定初始直线(x1,y1)、(x2,y2),按Koch曲线的构成原理计算出各关键点坐标如下: x4 = x1 *2/3 + x2* 1/3; y4 = y1 *2/3 + y2* 1/3; x5 = x1 *1/3 + x2* 2/3; y5 = y1 *1/3 + y2* 2/3; x3 = (x4 + x5) /2 + (y4-y5)* sqrt(3.0)/2; y3 = (y4 + y5) /2 + (x5-x4)* sqrt(3.0)/2; 2.利用递归算法,将计算出来的新点分别对应于(x1,y1)、(x2,y2)),然后利用步骤1中的计算公式计算出下一级新点(x4, y4),(x5,y5),(x3,y3),并压入堆栈。 if(depth= 1){ //初始化画线 } else{.//递归 koch(x1,y1,x4,y4,depth-1); koch(x4,y4,x3,y3,depth-1); koch(x3,y3,x5,y5,depth-1); koch(x5,y5,x2,y2,depth-1); } 给定一个小量c,当lc时,被压入堆栈中的值依次释放完毕,同时绘制直线段x1,y1)、(x2,y2),然后结束程序. 2.2 koch树 算法步骤类似于koch雪花,只是初始化不同: c= 8; x3 =x2 +(c/ sin(50.0)), y3 =y2 +(y1 -y2)/ 5; a3 =x2, b3 =y2 +(y1 -y2)/ 2, a4 =x2, b4=y2+(y1 -y2)/3; x4 =x1* 2 / 3 +x2* 1 / 3; y4 =y1* 2 / 3 +y2* 1 / 3; x5 =x1* 1 / 3 +x2* 2 / 3; y5 =y1* 1 / 3 +y2* 2 / 3; x6 =(x4 +x5)/ 2 +(y4 -y5)* sqrt(5.0)/ 2; y6 =(y4 +y5)/ 2 +(x5 -x4)* sqrt(5.0)/ 2; x7 =(x2 +x5)/ 2 +(y2 -y5)* sqrt(3.0)/ 2; y7 =(y2 +y5)/ 2 +(x5 -x2)* sqrt(3.0)/ 2; x8 =(x5 +x4)/ 2 +(y5 -y4)* sqrt(7.0)/ 2; y8 =(y5 +y4)/ 2 +(x4 -x5)* sqrt(7.0)/ 2; x9 =(x5 +x2)/ 2 +(y5 -y2)* sqrt(3.0)/ 2;

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档