3 分形曲面 - Read.DOC

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

3 分形曲面 分形曲面在自然界也是大量存在的,山脉、地形、岩石、云团等,都是分形曲面的实例。 本章着重介绍分形曲面及其计算机生成的方法。首先从最简单的三角形中点位移法及其计算机算法描述开始。然后介绍二维随机网格分形曲面的生成算法,在此基础上,叙述分形曲面上实体纹理,如大理石、木纹及铸件表面纹理的生成方法。此外,还进一步讨论云团形状的生成方法。山脉和云团是自然景物计算机模拟中的重要对象,本章还提供了实用的计算机算法。 为了更好地研究分形地形地貌曲面的有关理论和方法,本章还专门阐述了分形布朗曲面即FBM曲面,这是分形研究的一个重要分支,是分形的创始人Mandelbrot和Ness在60年代后期提出的一种模型,已用于模拟各种地貌及星球表面的不规则形状。 3.1中点位移法 上一章,我们介绍的中点位移法和中点细分随机分形曲线生成算法,可用以生成各种类似海岸线、河川、山形的曲线。将这些方法加以拓广,即可用于产生各种分形曲面。 中点位移法是分形曲面生成算法中最简单的一种,这里首先引入一种以三角形为图形基元的分形曲面生成法。为了叙述的方便,我们把最初给出的三角形,称为父三角形,将三角形每边中点位移后的点适当连接面形成的四个三角形,称为子三角形(参照图3-1) 中点位移法生成分形曲面的步骤如下: (1)从初始的三角形出发,求出各边中点(M1、M2、M3); (2)在该中点处,沿铅垂方向向上产生一个位移量Wi,该位移量与边长成比例,比例因子可以随机产生,或由一些均匀分布的随机数组组成的集中取出,三条边中点处产生位移,得到三个新的点(D、E、F); (3)将三个新点和原三角形的三个顶点相连接,产生四个新的三角形,即△ADF,△BDE,△CEF和△DEF; (4)对每个子三角形作同样的操作,如此不断迭代循环,直到满足终止条件为止。 一般来说,中点位移量是一个随机变量,并且必须随三角形的子分而不断变小。 在上述分形曲面生成过程中,通过三角形的不断被子分而使整个表面弄成皱折,产生类似于山脉的形状——分形山。 上述生成分形曲面的算法如下表所示: Void subdiv-3d(,w1,w2,w3,n,dir) 功能:中点位移算法生成中点细分随机曲面 参数说明:float x1,y1,z1,x2,y2,z2,x3,y3,z3:三角形顶点 int w1,w2,w3:三角形三边上中点位移量 int n:递归深度 int dir:分隔的三角形走向 变量说明:x12,y12,z12,x23,y23,z23,x31,y31,z31:三角形各边的中点坐标 调用函数说明:rand():伪随机数发生器函数[0,1] moveto_3d(x,y,z):将当前坐标位置移动到(x,y,z)位置,并投影到2d上显示 lineto_3d(x,y,z):从当前位置画线到(x,y,z) 位置,并投影到2d上显 { if (n==0) { moveto_3d(x3,y3,z3); if (dir0) { lineto_3d(x1,y1,z1); lineto_3d(x2,y2,z2); lineto_3d(x3,y3,z3); } else { lineto_3d(x2,y2,z2); lineto_3d(x1,y1,z1); lineto_3d(x3,y3,z3); } return; } x12=(x1+x2)/2+w1*rand(); y12=(y1+y2)/2+w1*rand(); z12=(z1+z2)/2+w1*rand(); x23=(x2+x3)/2+w2*rand(); y23=(y2+y3)/2+w2*rand(); z23=(z2+z3)/2+w2*rand(); x31=(x3+x1)/2+w3*rand(); y31=(y3+y1)/2+w3*rand(); z31=(z3+z1)/2+w3*rand(); subdiv_3d(x1,y1,z1,x12,y12,z12,x31,y31,z31,w1/2,w2/2,w3/2,n-1,dir); subdiv_3d(x2,y2,z2,x23,y23,z23,x12,y12,z12,w2/2,w3/2,w1/2,n-1,dir); subdiv_3d(x3,y3,z3,x31,y31,z31,x23,y23,z23,w3/2,w1/2,w2/2,n-1,dir); subdiv_3d(x12,y12,z12,x31,y31,z31,x23,y23,z23,w2/2,w

文档评论(0)

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

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

1亿VIP精品文档

相关文档