关闭

关闭

封号提示

内容

首页 分形算法与程序设计.ppt

分形算法与程序设计.ppt

分形算法与程序设计.ppt

上传者: 月华天降 2014-03-15 评分 5 0 215 29 978 暂无简介 简介 举报

简介:本文档为《分形算法与程序设计ppt》,可适用于IT/计算机领域,主题内容包含第章第章初识分形Fractal的含义分形的几何特征分形的度量分形维数分形是一种方法论分形与计算机图形学Fractal的含义Fractal的含义英文单符等。

第章第章初识分形Fractal的含义分形的几何特征分形的度量分形维数分形是一种方法论分形与计算机图形学Fractal的含义Fractal的含义英文单词Fractal在大陆被译为“分形”在台湾被译为“碎形”。它是由美籍法国数学家曼德勃罗(BenoitMandelbrot)创造出来的。其含义是不规则的、破碎的、分数的。曼德勃罗是想用此词来描述自然界中传统欧几里得几何学所不能描述的一大类复杂无规的几何对象。分形的几何特征分形的几何特征自相似性自相似便是局部与整体的相似。自仿射性自仿射性是自相似性的一种拓展。如果将自相似性看成是局部到整体在各个方向上的等比例变换的结果的话那么自仿射性就是局部到整体在不同方向上的不等比例变换的结果。前者称为自相似变换后者称为自仿射变换。精细结构任意小局部总是包含细致的结构。分形的度量分形的度量()长度的测量Length(n=)=Length(n=)=Length(n=)=…………Length=lim(Length(n))=lim()=nnn分形的度量分形的度量()面积的测量Area(n)=()=Area(n)=()Area(n)=()…………Area(n)=lim(()n)=n如上所述koch曲线在一维欧氏空间中的度量为在二维欧氏空间中的面积为。如此看来Koch曲线在传统欧氏空间中不可度量。分形维数分形维数分形维数是分形的很好的不变量它一般是分数用它可以把握住分形体的基本特征。图a是边长为的正方形当边长变成原来的时原正方形中包含个小正方形如图b而=图c是边长为的正立方体当边长变成原来的时原正立方体中包含个小正立方体如图d而=。则有N=kD,D=log(N)log(k)这样Koch曲线的分形维数D=log()log()=分形维数分形维数对于实际的自然景物我们可以用计盒维数的方法测量分维。分形是一种方法论分形是一种方法论沃尔夫奖(WolfPrize)在颁发给分形理论创始人曼德勃罗时的评语所说的“分形几何改变了我们对世界的看法”。分形理论至少会在三个方面改变我们对世界的认识。首先自然界中许多不规则的形态其背后都有规则都可以用分形的方法建立模型并在计算机上构造出以假乱真的景象来显然利用这套方法我们可以把世界压缩到几个分形规则中便于携带和传播。其次许多以前被认为是随机的现象从分形理论的角度看并不是随机的比如布朗运动、股票价格的波动、传染病的流行传播等这为我们控制这些貌似随机的现象奠定了理论基础。最后分形理论中的分数维概念为我们认识世界中的复杂形态提供了一个新的尺度。复杂性科学是现代科学的前沿在这门科学的研究过程中发现了许多符合分形规则的复杂形态而分数维是测量这些形态复杂程度的一种度量。也就是说我们找到了对复杂性做定量分析的工具。分形与计算机图形学分形与计算机图形学分形理论的发展离不开计算机图形学的支持如果一个分形构造的表达不用计算机的帮助是很难让人理解的。不仅如此分形算法与现有计算机图形学的其他算法相结合还会产生出非常美丽的图形而且可以构造出复杂纹理和复杂形状从而产生非常逼真的物质形态和视觉效果。分形作为一种方法在图形学领域主要是利用迭代、递归等技术来实现某一具体的分形构造。分形几何学与计算机图形学相结合将会产生一门新的学科分形图形学。它的主要任务是以分形几何学为数学基础构造非规则的几何图素从而实现分形体的可视化以及对自然景物的逼真模拟。第章第章分形图的递归算法Cantor三分集的递归算法Koch曲线的递归算法Sierpinski垫片的递归算法HilbertPeano曲线的算法分支结构分形递归算法分形树递归算法递归算法递归算法u      直接递归调用的例子如下:voidRecur(n){……Recur(m)……}过程Recur的内部又调用了自身Recur过程。递归算法递归算法u      间接递归调用的例子如下:voidRecurA(n){……RecurB(m)……}voidRecurB(n){……RecurA(m)……} Cantor三分集的递归算法Cantor三分集的递归算法Koch曲线的递归算法Koch曲线的递归算法Koch曲线的递归算法Koch曲线的递归算法Koch曲线的递归算法Koch曲线的递归算法Sierpinski垫片的递归算法Sierpinski垫片的递归算法Sierpinski垫片的递归算法Sierpinski垫片的递归算法HilbertPeano曲线的算法HilbertPeano曲线的算法HilbertPeano曲线的算法HilbertPeano曲线的算法分支结构分形递归算法分支结构分形递归算法分支结构分形递归算法分支结构分形递归算法分形树递归算法分形树递归算法分形树递归算法分形树递归算法第章第章文法构图算法LS文法单一规则的LS文法生成多规则的LS文法生成随机LS文法文法构图算法文法构图算法字母表:LR生成规则:LRRLR初始字母:R则有:RLRRLRLRRLRRLRLRRLRLRRLRRLRLRRLR……LS文法LS文法二维LS是字母表的绘图规则如下:F:以当前方向前进一步并画线f:以当前方向前进一步不画线+:逆时针旋转角-:顺时针旋转角:将海龟当前信息压栈:将“”时刻的海龟信息出栈。单一规则的LS文法生成单一规则的LS文法生成Koch曲线的LS文法如下:w:Fa:oP:FF+F--F+F步骤:F步骤:F+F--F+F步骤:F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F步骤:F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F+F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F+F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F步骤:……单一规则的LS算法实现单一规则的LS算法实现单一规则的LS算法实现单一规则的LS算法实现单一规则的LS算法实现单一规则的LS算法实现多规则的LS文法生成多规则的LS文法生成为了生成更复杂的图形可将字母表增加字母元素Sierpinski垫片的LS文法如下:w:La:P:L+R-L-R+P:R-L+R+L-相应的改造:多规则的LS文法生成多规则的LS文法生成相应的改造:多规则的LS文法生成多规则的LS文法生成相应的改造:随机LS文法随机LS文法w:Fa:P:FF+FF-FFP:FF+FF-F+FP:FFF-F+F+F++F-F-F为了更好的模拟自然景物需要随机使用多个变换规则。ppp相应的改造:相应的改造:随机LS文法随机LS文法第章第章迭代函数系统算法混沌游戏迭代函数系统相似变换与仿射变换IFS码Sierpinski垫片的IFS生成拼贴与IFS码的确定IFS植物形态实例复平面上的IFS算法混沌游戏混沌游戏给定平面上三点A,B,C。再任意给定初始点Z,做下列迭代。当掷出的硬币呈正面当掷出的硬币呈反面当掷出的硬币呈侧面迭代函数系统迭代函数系统迭代函数系统(IteratedFunctionSystemIFS)是分形理论的重要分支。它将待生成的图像看成是由许多与整体相似的(自相似)或经过一定变换与整体相似的(自仿射)小块拼贴而成。相似变换与仿射变换相似变换与仿射变换直观上看:相似变换是指在各个方向上变换的比率必须相同的一种比例变换仿射变换是指在不同的方向上变化的比率可以不同的一种比例变换。相似变换:如果对于任意两点A、B以及对应点A’、B’总有A’B’=kAB(k为正实数)那么这个变换叫做相似变换实数k叫做相似比。仿射变换:x’=axbyey’=cxdyf其中a,b,c,d,e,f为仿射变换系数。IFS码IFS码用多个仿射变换式表达一个图象w,w,w,……使用每一个仿射变换式的概率p可以不同一般面积越大p值越大。于是只要获得a,b,c,d,e,f,p(IFS码)的值便可以得到要表达的图形。Sierpinski垫片的IFS生成Sierpinski垫片的IFS生成由于生成的三个小三角形的面积相等所以我们可以让w、w、w出现的概率相同或相近。x’=xy’=yx’=xy’=yx’=xy’=yx’=xyy’=xyx’=xyy’=xyx’=xyy’=xywwwSierpinski垫片的IFS生成Sierpinski垫片的IFS生成Sierpinski垫片的IFS生成Sierpinski垫片的IFS生成(源代码:书中程序)拼贴与IFS码的确定拼贴与IFS码的确定此时四个子图分别是目标图的、、、大小的复制品。然后按顺序交互式地在屏幕上调节每一个子图的仿射变换参数ai、bi、ci、di、ei使得平移、旋转后基本覆盖住目标图。IFS植物形态实例IFS植物形态实例IFS码在书中表IFS码在书中表IFS码在书中表复平面上的IFS算法复平面上的IFS算法复平面上的IFS算法复平面上的IFS算法复平面上的IFS算法复平面上的IFS算法第章第章逃逸时间算法基本思想Julia集的逃逸时间算法Mandelbrot集的逃逸时间算法基于牛顿迭代的Julia集的逃逸时间算法逃逸时间算法的基本思想逃逸时间算法的基本思想F(z)=zc当c=时由于z是复数即z=xyi则有z=zz=(xyi)(xyi)=xyixyi=(xy)(xy)i设复数z=xyi的绝对值即|z|=SQR(xy)|F(z)|=|xyxyi|=SQR((xy)(xy))=SQR(xyxyxy)=SQR((xy))=|z|若<|z|<,|F(z)|<|z|对于每一次迭代z趋向即z向收敛。若|z|>,经过迭代z会趋向无穷z向无穷逃逸。若|z|>,z是平面上的单位圆。逃逸时间算法的基本思想逃逸时间算法的基本思想当c时其吸引子不再是而是一个区域称混沌区。如图假设有一个充分大的整数N当未逃逸区域M中的初始点a经过小于N次迭代就达到未逃逸区域M的边界甚至超出了边界我们就认为点a逃逸出去了而如果经过N次迭代后a的轨迹仍未到达M的边界我们就认为a是A上的点。用这样的方法描绘出A的边界图形这便是逃逸时间算法的基本思想。Julia集的逃逸时间算法Julia集的逃逸时间算法Julia集的逃逸时间算法Julia集的逃逸时间算法Julia集的逃逸时间算法Julia集的逃逸时间算法Mandelbrot集的逃逸时间算法Mandelbrot集的逃逸时间算法Mandelbrot集的逃逸时间算法Mandelbrot集的逃逸时间算法基于牛顿迭代的Julia集的逃逸时间算法基于牛顿迭代的Julia集的逃逸时间算法牛顿迭代法求根公式:zn=znf(zn)f’(zn)其中f’(zn)是f(zn)的导数。考虑f(z)=z=的情况,那么相应的牛顿变换是f(z)=(z)z则z的三个根分别是w=,w=eiπ,w=eiπ三个根的吸引域A(w)A(w)A(w)的交界便是牛顿函数的Julia集。经过迭代在A(wi)上的点都会被吸引到点wi上。设一个较大的迭代次数N以及一个距离小量r当迭代次数达到N其与根点的距离小于r的被认为是收敛到某根上了否则被认为是逃逸了。基于牛顿迭代的Julia集的逃逸时间算法基于牛顿迭代的Julia集的逃逸时间算法基于牛顿迭代的Julia集的逃逸时间算法基于牛顿迭代的Julia集的逃逸时间算法第章第章分形显微镜逃逸时间算法的放缩原理Mandelbrot集的局部放大Julia集的局部放大牛顿迭代法的局部放大作为Julia集字典的Mandelbrot集逃逸时间算法的放缩原理逃逸时间算法的放缩原理Mandelbrot集的局部放大Mandelbrot集的局部放大Mandelbrot集的局部放大Mandelbrot集的局部放大Julia集的局部放大Julia集的局部放大Julia集的局部放大Julia集的局部放大牛顿迭代法的局部放大牛顿迭代法的局部放大牛顿迭代法的局部放大牛顿迭代法的局部放大作为Julia集字典的Mandelbrot集作为Julia集字典的Mandelbrot集Julia集是一个固定的值的图形展现而Mandelbrot集却要走遍所有的值显然每一个值都对应一个Julia集所以我们说Mandelbrot集是Julia集微缩字典。我们可以在Mandelbrot集的绘图空间中任意取一点并将其还原成相应的值再将此值作为Julia集程序中选定的值来绘制Julia集的图形。第章第章分形演化算法从逻辑运算谈起一维元胞自动机二维元胞自动机分形演化的DLA模型用DLA模型模拟植物的生长不同初始条件的DLA形态从逻辑运算谈起从逻辑运算谈起逻辑异或本行:下一行:一维元胞自动机一维元胞自动机元胞按等间隔方式分布在一条向两侧无限延伸的直线中称为一维元胞自动机。本行:其他下一行:一维元胞自动机一维元胞自动机二维元胞自动机二维元胞自动机在一个二维网格中如果抛下一粒种子(元胞着色)然后考察一下种子身边的格子中的元胞状态会发生什么事情。给一个规则即每一个格子的状态由其周围的八个格子的状态(或)来决定如果它周围八个格子中的状态值相加为奇数时则此格子下一个状态为如果它周围八个格子中的状态值相加为偶数时则此格子下一个状态为。就这样一步一步演化下去会看到图案。二维元胞自动机二维元胞自动机分形演化的DLA模型分形演化的DLA模型自然界中有很多种这样的生长集团分形演化的DLA模型分形演化的DLA模型分形演化的DLA模型分形演化的DLA模型用DLA模型模拟植物的生长用DLA模型模拟植物的生长如果初始不是一个原点而是一条直线且随机粒子从上面落到平面上它将会产生一个什么样的图形呢?不同初始条件的DLA形态不同初始条件的DLA形态第章第章分形动画双缓存技术摇曳的递归分形树旋转万花筒变形的芦苇收缩与伸展连续变化的Julia集双缓存技术在计算机上实现动画一个关键技术就是:在绘制新图之前要删除旧图。当然可以在每次画新图之前清屏以实现删除旧图但由于分形图一般画起来都比较慢清屏之后不会及时画出新图这样就会使动画产生闪烁。为了解决这一问题可以在程序中使用了双缓存技术即创建两个缓冲区一个用来绘制图形一个用来显示图形当在显示图形缓冲区中删除旧图的同时在绘制图形缓冲区中画新图随后由显示图形缓冲区调出此图从而提高了显示速度避免了动画的闪烁。双缓存技术双缓存技术双缓存技术摇曳的递归分形树摇曳的递归分形树旋转万花筒旋转万花筒变形的芦苇变形的芦苇收缩与伸展收缩与伸展连续变化的Julia集连续变化的Julia集连续变化的Julia集连续变化的Julia集连续变化的Julia集连续变化的Julia集第章第章三维空间中的分形OpenGL简介三维空间中的Sierpinski地毯Sierpinski金字塔三维空间中Sierpinski海绵OpenGL简介OpenGL简介OpenGL即开放性图形库(OpenGraphicsLibrary)是一个三维的计算机图形和模型库。OpenGL包含个图形函数在微机环境下共有种函数即基本(或核心)函数、实用函数、辅助函数、Windows专用函数和WinAPI函数。OpenGL的基本功能.绘制物体OpenGL提供了丰富的基本图元绘制命令从而可以方便地绘制物体包括规则的和不规则的。OpenGL的基本功能.变换OpenGL提供了一系列基本的变换如取景变换、模型变换、投影变换及视口变换。OpenGL的基本功能.光照处理包括发射光、环境光、散射光和镜面反射光。OpenGL的基本功能.着色OpenGL提供了两种物体着色模式一种是RGBA颜色模式另一种是颜色索引(ColorIndex)模式。OpenGL的基本功能.反走样在OpenGL绘制图形过程中由于使用的是位图所以绘制出的图像的边缘会出现锯齿形状称为走样。为了消除这种缺陷OpenGL提供了点、线、多边形的反走样技术。OpenGL的基本功能.融合为了使三维图形更加具有真实感经常需要处理半透明或透明的物体图像这就需要用到融合技术。OpenGL的基本功能.雾化正如自然界中存在烟雾一样OpenGL提供了“fog”的基本操作来达到对场景进行雾化的效果。OpenGL的基本功能.位图和图像在图形绘制过程中位图和图像是非常重要的一个方面。OpenGL提供了系列函数来实现位图和图像的操作。OpenGL的基本功能.纹理映射在计算机图形学中把包含颜色、alpha值、亮度等数据的矩形数组称为纹理。而纹理映射可以理解为将纹理粘贴在所绘制的三维模型表面以使三维图形显得更生动。OpenGL的运行环境.动画出色的动画效果是OpenGL的一大特色OpenGL提供了双缓存区技术来实现动画绘制。OpenGL的基本函数.顶点坐标OpenGL采用有序排列的顶点集合来构造几何图元而不是将线段、多边形组合起来构造几何图元。如:glVertexs(,)整数定义的二维坐标glVertexf(,,)浮点定义的三维坐标OpenGL的基本函数.顶点关系在OpenGL中同一个几何图元的所有被定义的顶点一起放在glBegin()和glEnd()函数之间同时定义这些顶点之间的关系。如:glBegin(GLPOLYGON)glVertexs(,)glVertexs(,)glVertexs(,)glVertexs(,)glVertexs(,)glEnd()OpenGL的基本函数.显示列表OpenGL显示列表(DispplayList)是由一组预先存储起来的留待以后调用的OpenGL函数语句组成的当调用这张显示列表时就一次执行表中所列出的函数语句。创建显示列表OpenGL用下面的函数组创建显示列表:voidglNewList(GLuintlist,GLenummode)……voidglEndList(void)执行显示列表显示列表的执行函数形式如下:voidglCallList(GLuintlist)参数list指定被执行的显示列表。OpenGL的基本函数.颜色设置RGBA模式下的颜色定义在RGBA模式下利用glColor*命令来定义当前颜色。glColor*命令有如下几种形式:voidglColor{bsifdubusui}(TYPEr,TYPEg,TYPEb)voidglColor{bsifdubusui}(TYPEr,TYPEg,TYPEb,TYPEa)voidglColor{bsifdubusui}v(TYPE*v)voidglColor{bsifdubusui}v(TYPE*v)在颜色索引模式下的颜色定义通过调用函数glIndex*()从颜色索引表中选取当前颜色。voidglIndex(sfdi)(c:TYPE)voidglIndex(sfdi)v(c:PTYPE)OpenGL的基本函数.光照设置创建光源(LightSource)光源有许多特性如颜色、位置、方向等。可以使用下面的函数定义光源:voidglLight{if}v(GLenumlight,GLenumpname,TYPEparam)启动光照在OpenGL中必须明确指出光照是否有效或无效。如果光照无效则只是简单地将当前颜色映射到当前顶点上去不进行法向、光源、材质等复杂计算那么显示的图形就没有真实感。启动和取消光源的函数如下:glEnable(GLLIGHTING)启动光照gDisable(GLLIGHTING)取消光照OpenGL的基本函数.明暗处理在OpenGL中用单一颜色处理的称为平面明暗处理(FlatShading)用许多不同颜色处理的称为光滑明暗处理(SmoothShading)。设置明暗处理模式的函数为:voidglShadeModel(GLenummode)OpenGL的基本函数.材质设置材质定义材质的定义与光源的定义类似。其函数为:voidglMaterial{if}v(GLenumface,GLenumpname,TYPEparam)改变材质在OpenGL中提供了两种方式来改变场景中的材质。第一种方法是利用函数glMaterial*()来改变材质但是调用函数glMaterial*()需要同时保存当前矩阵也就是调用函数glPushMatrix()和glPopMatrix()。第二种方法是使用函数glColorMaterial()其形式为:voidglColorMaterial(GLenumface,GLenummode)OpenGL的基本函数.纹理映射纹理定义在程序中可以用以下函数定义二维纹理映射:voidglTexImageD(GLenumtarget,GLintlevel,GLintcomponents,GLsizeiwidth,Glsizeiheight,GLintborder,GLenumformat,GLenumtype,constGLvoid*pixels)纹理控制OpenGL中控制纹理的函数是:voidglTexParameter{if}v(GLenumtarget,GLenumpname,TYPEparam)定义纹理坐标OpenGL坐标定义的函数是:voidgltexCoord{}{sifd}v(TYPEcoords)OpenGL的基本函数.选择与反馈在OpenGL中提供了选择和反馈两种方式以实现对屏幕上的某个物体的信息提供达到交互的目的。进行模式选择的函数原型如下:LintglRenderMode(GLenumMode)在进入选择模式之前必须调用函数glSelectBuffer()来制定选择数组。在进入反馈模式之前必须调用函数glFeedbackBuffer()来制定反馈数组。OpenGL的基本函数.帧缓存与动画帧缓存的组成OpenGL帧缓存由以下四种缓存组成:颜色缓存(ColorBuffer)、深度缓存(DepthBuffer)、模板缓存(StencilBuffer)、累积缓存(AccumulationBuffer)。缓存清除OpenGL清除缓存操作过程是:先给出要写入每个缓存的清除值然后用单个函数命令执行操作传入所有要清除的缓存表。动画OpenGL提供了双缓存可以用来制作动画。也就是说在显示前台缓存内容中的一帧画面时后台缓存正在绘制下一帧画面当绘制完毕则后台缓存内容便在屏幕上显示出来而前台正好相反又在绘制下一帧画面内容。这样循环反复屏幕上显示的总是已经画好的图形于是看起来所有的画面都是连续的。三维空间中的Sierpinski地毯三维空间中的Sierpinski地毯三维空间中的Sierpinski地毯三维空间中的Sierpinski地毯三维空间中的Sierpinski地毯三维空间中的Sierpinski地毯Sierpinski金字塔Sierpinski金字塔Sierpinski金字塔Sierpinski金字塔Sierpinski金字塔Sierpinski金字塔Sierpinski海绵Sierpinski海绵Sierpinski海绵Sierpinski海绵Sierpinski海绵Sierpinski海绵Sierpinski海绵Sierpinski海绵Sierpinski海绵Sierpinski海绵Sierpinski海绵Sierpinski海绵Sierpinski海绵Sierpinski海绵Sierpinski海绵Sierpinski海绵第章第章分形自然景物模拟算法随机中点位移法生成山分形插值算法生成云和山随机中点位移法生成山随机中点位移法生成山 一维中点位移法以一条水平地平线段开始    重复足够多次{  对场景中的每条线段做{    找到线段的中点    在 Y 方向上随机移动中点一段距离    减小随机数取值范围  }}随机中点位移法生成山随机中点位移法生成山 一维中点位移法粗糙度常量。这个值决定每次循环随机数值域的减少量也就是说决定分形结果的粗糙程度。例如使用一个  到  之间的浮点数并称之为 H 。因此 (ah) 是( 对于小 H) 到 (对大 H )范围内的数。随机数范围在每次循环时乘上这个值。如果 H 设为  则随机数范围将每次循环减半从而得到一个非常平滑的分形。将 H 设为  则范围根本不减小结果有明显的锯齿感。随机中点位移法生成山随机中点位移法生成山 二维中点位移法上面是将索引( x 值)映射为高度值( y 值)。    如果需要一个两维高度值数组它将索引 (x,z) 映射为高度 (y) 。数组只需保存高度值 (y) 。水平面值 (x 和 z) 可以在分析数组时即时生成。    通过对每个高度指定一个颜色可以将一幅高度图显示为一幅图像。如下高点为白色低处为黑色。    绘制高度图的方法对于生成云彩纹理图是很有用的。随机中点位移法生成山随机中点位移法生成山三维中点位移法选择AB、AC、BC线段中点并沿y方向分别加一个随机量h、h、h得到E、F、G点其中h、h、h的取值范围相同。连接AE、BE、AF、CF、BG、CG从而构成AEG、BEF、CFG、EFG等个小三角形并将原来的三角形ABC抹去。选择明暗不同的种颜色分别填充这个三角形。分别基于上述形成的个小三角形重复执行上面的操作。随机中点位移法生成山随机中点位移法生成山三维中点位移法在实现此算法时应避免出现山体裂痕。当每一级中点位移时都是基于每一个独立的小三角形进行的但由于各三角形之间有共用边所以会出现共用被移位两次的情况而且两次位移的高度会有所不同(因为移位中有随机量)这样便会出现裂痕。解决办法是先移位三边都是共用的三角形然后其他三角形在移位时只移位非共用边即可。分形插值算法生成云和山分形插值算法生成云和山在平面上划分正方形网络nn随机给A、B、C、D四个角点的颜色根据四个角点的颜色值的平均值产生中点M的颜色根据A、B、M点和网格外一虚拟点(颜色值为)求平均得到边中点E的颜色根据B、C、M点和网格外一虚拟点(颜色值为)求平均得到边中点F的颜色根据C、D、M点和网格外一虚拟点(颜色值为)求平均得到边中点G的颜色根据A、D、M点和网格外一虚拟点(颜色值为)求平均得到边中点H的颜色根据小正方形EBFM四角点颜色的平均值求出小正方形中点以及小正方形的边中点的颜色然后再沿用上述规则计算小正方形MFCG的中点及边中点的颜色以此类推计算小正方形HMGD、AEMH的中点和边中点的颜色。分形插值算法生成云和山分形插值算法生成云和山在XY平面上绘制一个nn的正方形网格并对个角点在Z方向上分别设置初始高度ha、hb、hc、hd得到A、B、C、D四点根据式hm=(hahbhchd)计算正方形网格中点的高度hm其中为一随机量从而得到M点根据角点和中点以及虚拟点计算边中点的高度即he=(hahbhm)hf=(hbhchm)hg=(hchdhm)hh=(hdhahm)其中为一随机量从而得到E、F、G、H四点分形插值算法生成云和山分形插值算法生成云和山再根据E、B、F、M四点的高度计算小正方形EBFM中点的高度类似地计算小正方形MFCG、HMGD、AEMH中点的高度即he’=(hahbhmhe)hf’=(hbhchmhf)hg’=(hchdhmhg)hh’=(hdhahmhh)以及这些正方形边中点的高度递归上面的步骤使正方形网格逐步细化直至达到预期递归深度然后连接每个正方形网格点。

职业精品

精彩专题

上传我的资料

热门资料

资料评价:

/ 138
所需积分:0 立即下载

意见
反馈

返回
顶部

Q