计算机图形学 分形图的生成936
- 格式:doc
- 大小:50.00 KB
- 文档页数:6
实验课题:(六)分形图的生成
1. 用Matlab 编程,画出Cantor 三分集的图形。
2. 画出按下列各图所示方法生成的分形的图形,并计算出其自相似维数。
你自己构造出一些生成元,并由此绘出相应的分形图形。
3. Weierstrass 函数的定义是:
∑∞=-=1)2()sin()(k k k s x x W λλ
,1>λ,21<<s
试对不同的s 值,画出函数的图象,并观察图象的不规则性与s 的关系,。
4. 画出Levy 曲线的图象。
试着改变IFS 迭代中仿射变换的系数和概率的值,看看能否生成一些新的分形图。
5. 自己编写程序,画出Mandelbrot 集的图形。
然后任意选取它的一个局部将其放大,观察放大后的图形与原图形之间的关系。
6. Julia 集和Mandelbrot 集可以推广到高阶情形,即考虑下列n 次复变函数迭代:
c Z Z n k k +=+1, ,2,1,0=k
对固定的c ,使得上述迭代有界的初值0Z 构成的集合称为n 阶Julia 集;对固定的初值0Z ,使得上述迭代有界的参数c 构成的集合称为n 阶Mandelbrot 集。
对不同的n ,画出相应的Julia 集和Mandelbrot 集。
进而构造一些不同的迭代函数,如余弦函数z z f cos )(=和牛顿函数233/)12()(z z z f +=,画出类似的Julia 集和Mandelbrot 集。
生成元 初始元 生成元
初始元。
实验六分形图的生成班级 08信计学号60姓名杨平萍分数一、实验目的和要求:1、掌握分形基本原理2、熟悉分形的计算机模拟算法3、上机操作迭代函数系统算法4、编译并执行谢宾斯基(Sierpinski)三角形二、实验内容:1、编程实现分形的迭代函数系统算法,并输出图形;2、编译曼德布洛特集和可放大的曼德布洛特集。
.三、编程并实现Mandelbrot Set (曼德布洛特集)的运行程序:#include <graphics.h>#include <conio.h>struct COMPLEX{double re;double im;};COMPLEX operator * (COMPLEX a, COMPLEX b){COMPLEX c;c.re = a.re * b.re - a.im * b.im;c.im = a.im * b.re + a.re * b.im;return c;}COMPLEX operator + (COMPLEX a, COMPLEX b){COMPLEX c;c.re = a.re + b.re;c.im = a.im + b.im;return c;}void main(){initgraph(640, 480);COMPLEX z, c;int x, y, k; // 定义循环变量for(x = 0; x < 640; x++){c.re = -2.1 + (1.1 - -2.1) * (x / 640.0);for(y = 0; y < 480; y++){c.im = -1.2 + (1.2 - -1.2) * (y / 480.0);z.re = z.im = 0;for(k = 0; k < 180; k++){if ( z.re * z.re + z.im * z.im > 4.0 ) break;z = z * z + c;}putpixel(x, y, (k >= 180) ? 0 : HSLtoRGB((float)((k << 5) % 360), 1.0, 0.5));}}getch();closegraph();}程序截图可以无穷放大的Mandelbrot Set (曼德布洛特集)的运行程序:#include <graphics.h>#include <conio.h>#define ITERATIONS 1000#define MAXCOLOR 64struct COMPLEX{double re;double im;};COMPLEX operator * (COMPLEX a, COMPLEX b){COMPLEX c;c.re = a.re * b.re - a.im * b.im;c.im = a.im * b.re + a.re * b.im;return c;}COMPLEX operator + (COMPLEX a, COMPLEX b){COMPLEX c;c.re = a.re + b.re;c.im = a.im + b.im;return c;}int Color[MAXCOLOR];void InitColor(){int h1 = 240, h2 = 30;for(int i=0; i<MAXCOLOR/2; i++){Color[i] = HSLtoRGB((float)h1, 1.0f, i * 2.0f / MAXCOLOR);Color[MAXCOLOR-1-i] = HSLtoRGB((float)h2, 1.0f, i * 2.0f / MAXCOLOR);}}void Draw(double fromx, double fromy, double tox, double toy){COMPLEX z, c;int x, y, k;for(x = 0; x < 640; x++){c.re = fromx + (tox - fromx) * (x / 640.0);for(y = 0; y < 480; y++){c.im = fromy + (toy - fromy) * (y / 480.0);z.re = z.im = 0;for(k = 0; k < ITERATIONS; k++){if ( z.re * z.re + z.im * z.im > 4.0 ) break;z = z * z + c;}putpixel(x, y, (k >= ITERATIONS) ? 0 : Color[k % MAXCOLOR]);}}}void main(){initgraph(640, 480);InitColor();double fromx, fromy, tox, toy;fromx = -2.1; tox = 1.1;fromy = -1.2; toy = 1.2;Draw(fromx, fromy, tox, toy);MOUSEMSG m;bool isLDown = false;int selfx, selfy, seltx, selty;while(!kbhit()){m = GetMouseMsg();switch(m.uMsg){case WM_MBUTTONUP:fromx = -2.1; tox = 1.1;fromy = -1.2; toy = 1.2;Draw(fromx, fromy, tox, toy);break;case WM_MOUSEMOVE:if (isLDown){rectangle(selfx, selfy, seltx, selty);seltx = m.x;selty = m.y;rectangle(selfx, selfy, seltx, selty);}break;case WM_LBUTTONDOWN:setcolor(WHITE);setwritemode(R2_XORPEN);isLDown = true;selfx = seltx = m.x;selfy = selty = m.y;rectangle(selfx, selfy, seltx, selty);break;case WM_LBUTTONUP:rectangle(selfx, selfy, seltx, selty);setwritemode(R2_COPYPEN);isLDown = false;seltx = m.x;selty = m.y;if (selfx == seltx || selfy == selty) break;int tmp;if (selfx > seltx) {tmp = selfx; selfx = seltx; seltx = tmp;}if (selfy > selty) {tmp = selfy; selfy = selty; selty = tmp;}if ( (seltx - selfx) * 0.75 < (selty - selfy) ){selty += (3 - (selty - selfy) % 3);selfx -= (selty - selfy) / 3 * 4 / 2 - (seltx - selfx) / 2;seltx = selfx + (selty - selfy) / 3 * 4;}else{seltx += (4 - (seltx - selfx) % 4);selfy -= (seltx - selfx) * 3 / 4 / 2 - (selty - selfy ) / 2;selty = selfy + (seltx - selfx ) * 3 / 4;}double f, t;f = fromx + (tox - fromx) * selfx / 640;t = fromx + (tox - fromx) * seltx / 640;fromx = f;tox = t;f = fromy + (toy - fromy) * selfy / 480;t = fromy + (toy - fromy) * selty / 480;fromy = f;toy = t;Draw(fromx, fromy, tox, toy);break;}}getch();closegraph();}程序截图:四、实验结果分析分形的对称性即表现了传统几何的上下、左右及中心对称。
分形图案的快速生成法
徐永安;陶海燕
【期刊名称】《南京理工大学学报(自然科学版)》
【年(卷),期】1996(000)004
【摘要】该文给出了经典Mandelbrot集合和Julia集合的概念,分析了常用的点点计算法的特征,在此基础上设计出快速的有限递归细分算法(finiterecursionsub-devide,简称FRS)。
利用这2种算法生成Mandelbrot放大集以及三角函数、指数函数、Gauss和函数、Newton解函数的Julia集合并进行比较,FRS法一般要比点点计算法快3~5倍,解决了微机生成分形图案时间太长的问题。
通过快速算法显示出分形图案的内部蕴涵的精妙结构。
【总页数】1页(P310)
【作者】徐永安;陶海燕
【作者单位】不详;不详
【正文语种】中文
【中图分类】TP391.41
【相关文献】
1.图像扫描波动性定量标准及分形扫描矩阵的快速生成 [J], 刘向东;段晓东;王光兴;朱伟勇
2.多重分形降趋波动分析法和移动平均法的分形谱算法对比分析∗ [J], 奚彩萍;张
淑宁;熊刚;赵惠昌
3.分形图案与传统纺织印花图案的形式美感对比 [J], 唐颖;房宽峻;沈雷
4.基于分形理论的羌族图案分析 [J], 杨小蕾;饶锦锋
5.分形艺术图案的美学特征探析 [J], 吴凡;王教庆
因版权原因,仅展示原文概要,查看原文内容请购买。
中文摘要本文主要研究三维分形图的生成技术。
首先探讨了原理简单的递归算法,该算法适于生成各种三维图形。
分析了二维与三维分形递归算法的主要步骤、部分实现代码并在此基础上生成了三维图和图的变形。
接着讨论了迭代函数系统(IFS)的原理及相关算法,分析了IFS码的获取方法以及各IFS码在图像生成中的地位和作用。
重点研究二维的IFS算法如何扩展到三维,介绍了生成三维植物分形图的算法思路和主要步骤。
最后还介绍了能逼真再现山和云等自然景物的随机中点位移算法和分形插值算法。
关键词:分形图形学,递归算法,IFS迭代函数系统,随机中点位移算法,分形插值算法。
ABSTRACTThis thesis does research on three-dimensional fractal graphics.At first, it probes into Recursion Arithmetic, which has very simple principle but is able to create all kinds of three-dimensional graphics. It analyses the main steps of two-dimensional and three-dimensional fractal Recursion Arithmetic, part of the program and some ameliorations of the graphics.Then it discusses the principle and the related arithmetic for Iteration Function System (IFS). It analyses the ways that how to get IFS codes and their status and function in fractal graphics. It pays attention to the research on how to make two-dimensional IFS Arithmetic expand to three-dimensional IFS Arithmetic. It introduces the arithmetic and main steps of creating three-dimensional foliage fractal graphics.At last, it introduces Stochastic Midpoint Displacement Arithmetic and Detached Data Input Arithmetic, which can simulate scenery very naturally.Keywords: Fractal graphics, Recursion Arithmetic, Iteration Function System (IFS), Stochastic Midpoint Displacement Arithmetic, Detached Data Input Arithmetic.目录1. 绪论1.1引言 (1)1.2分形图形学简介 (1)1.3研究意义 (3)1.4研究背景 (4)1.5本文工作 (5)2. 递归算法——生成三维图形2.1自相似性 (6)2.2递归原理 (6)2.3二维中Sierpinski地毯的递归算法 (7)2.4三维中Sierpinski海绵的递归算法 (8)2.5 Visual C++环境下生成三维Sierpinski海绵及其变形的研究 (11)3. IFS迭代算法——模拟三维植物形态3.1相似变换与仿射变换 (12)3.2用拼贴法确定IFS码 (13)3.3 二维IFS迭代算法得到植物形态 (15)3.4三维IFS迭代算法逼真模拟植物形态 (17)3.5 二维IFS迭代与三维IFS迭代的比较 (20)4. 其它三维分形算法——逼真再现山和云4.1随机中点位移算法实现三维分形 (20)4.2分形插值算法实现三维分形 (23)5.结论5.1工作总结 (26)5.2有待改进之处 (26)附录 (28)参考文献 (34)三维分形图生成算法的研究及程序实现1. 绪论1.1 引言事实上,无论从美学的观点还是从科学的观点,许多人在第一次见到分形时都有新的感受。
数学的分形几何分形几何是一门独特而迷人的数学领域,它研究的是自相似的结构和形态。
分形几何的概念由波蒂亚·曼德博(Benoit Mandelbrot)在1975年首次提出,之后得到了广泛应用和发展。
本文将介绍分形几何的基本概念和应用领域,旨在帮助读者更好地了解这一令人着迷的学科。
一、分形几何的基本概念分形(fractal)是一种非几何形状,具有自相似的特点。
简单来说,分形就是在各个尺度上都具有相似性的图形。
与传统的几何图形相比,分形图形更加复杂、细致,其形状常常无法用传统的几何方法进行描述。
分形几何的基本概念包括分形维度、分形特征和分形生成等。
1. 分形维度分形维度是分形几何中的重要概念之一。
传统的几何图形维度一般为整数,如直线的维度为1,平面的维度为2,而分形图形的维度可以是非整数。
分形维度能够描述分形的复杂程度和空间占据情况,是衡量分形图形特性的重要指标。
2. 分形特征分形几何的分形特征是指分形图形所具有的一些独特性质。
其中最著名的就是自相似性,即分形图形在不同尺度上具有相似的形态和结构。
此外,分形图形还具有无限的细节,无论放大多少倍都能够找到相似的结构。
3. 分形生成分形图形的生成是分形几何中的关键问题之一。
分形图形可以通过递归、迭代等方式进行生成,比如著名的分形集合——曼德博集合就是通过迭代运算得到的。
分形生成的过程常常需要计算机的辅助,对于不同的分形形状,生成算法也有所不同。
二、分形几何的应用领域分形几何的独特性质使其在许多领域中得到广泛应用。
以下列举了几个典型的应用领域。
1. 自然科学分形几何在自然科学中有着广泛的应用。
例如,分形理论可以用来研究自然界中的地形、云雾形态等。
通过分形几何的方法,我们能够更好地理解和描述自然界的复杂性,揭示出隐藏在表面之下的规律。
2. 经济金融分形几何在经济金融领域也有着重要的应用。
金融市场的价格走势往往具有分形特征,通过分形几何的方法可以更好地预测未来的市场走势和波动。
分形图形生成原理探究随着计算机技术的不断发展,分形图形在数字艺术、自然科学和工程领域中得到广泛应用。
分形是一种具有自相似性质的数学对象,其生成原理深受人们的关注。
本文将探究分形图形的生成原理,介绍分形的基本概念,以及常用的分形生成算法。
一、分形的基本概念分形是一种具有自相似性质的几何图形。
即整体结构和局部细节之间存在某种相似关系,不论放大还是缩小,都可以看到相同的图形。
分形的自相似性质使得它们具有无限的细节和复杂度。
二、分形图形的生成原理1. 迭代运算迭代运算是生成分形图形的常用方法之一。
这种方法通过重复应用某种变换或映射规则,不断生成新的图形。
具体步骤如下:- 首先选定一个初始图形,例如一个简单的线段或几何形状。
- 然后根据一定的规则进行变换或映射操作,生成下一级的图形。
- 重复上述步骤,直到达到期望的分形效果。
迭代运算可以产生各种各样的分形图形,如科赫曲线、谢尔宾斯基三角形等。
2. 噪声函数噪声函数是通过随机性来生成分形图形的一种方法。
噪声函数可以产生随机性纹理或图案,并通过适当的参数调节,实现分形效果。
生成分形图形的基本步骤如下:- 首先定义一个噪声函数,它可以是简单的随机数生成器或更复杂的数学函数。
- 然后使用噪声函数来计算每个像素的数值或颜色,从而生成图像。
噪声函数可以用于生成山脉、云彩等具有分形特征的自然图像。
三、常用的分形生成算法1. 递归细分递归细分是一种通过使用分形规则进行逐级细分的方法。
它基于拆分和替代的原则,不断将图形细分为更小的部分,然后用更小的部分替代原有的部分。
递归细分可以生成多种复杂的分形图形,如分形树、雪花等。
2. 碎形图像编码碎形图像编码是一种基于碎形压缩理论的分形生成方法。
它通过找到一组变换规则和关联函数,将整个图像分割成小的区域,然后用适当的变换规则对每个区域进行编码。
这种方法可以生成高质量的分形图像,并用较小的存储空间保存。
3. 分形几何建模分形几何建模是一种通过将分形规则应用于三维空间中的几何体来生成分形图形的方法。
北方工业大学硕士学位论文题目:分形图形生成的方法和表现北方工业大学_____计算机应用技术____学科学科带头人(签字)___________年月日学位论文任务书研究生:黄波___信息工程___ _____学院_________计算机应用技术 _____专业_______ _____计算机图形学_________研究方向论文题目:___分形图形生成的方法和表现_________ (_2003__年__1__月__15_日经院学术委员会批准)选题的来源、意义和价值:分形理论新颖的指导思想和独特的分析方法被很多学科竞相引入 ,如何利用计算机生成比较理想的分形图形的成为一个备受关注的新课题。
本课题的研究旨在结合分形几何学和计算机图形学理论 ,部分解决非规整形状图形的计算机描述和处理方法,可以提供两个层次的研究结果:第一个层次是理论结果,第二个层次是利用新迭代格式生及规则生成不同的分形图形并实现对图形的组合及存储的软件系统。
将系统生成的分形图形用于信息加密防伪、电影、动画分形场景、分形纹样设计及建筑设计等领域,有很好的应用前景。
学位论文工作自__2002_年___11_____月____15____日起至____2004 _年___5_____月___28____日止呈交学位论文日期____2004__ __年___5_ ___月___28 __日答辩日期_2004__年___6___月__21_____日导师(签字):____________独创性声明本人声明所呈交的学位论文是本人在导师指导下进行的研究工作及取得的研究成果。
据我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得北方工业大学或其他教育机构的学位或证书而使用过的材料。
与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示谢意。
学位论文作者签名:签字日期:年月日学位论文版权使用授权书本学位论文作者完全了解北方工业大学有关保留、使用学位论文的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁盘,允许论文被查阅和借阅。
分形图形的计算机生成及其相关技术
蔡葵
【期刊名称】《湖北科技学院学报》
【年(卷),期】2004(024)003
【摘要】基于作者开发分形图形生成程序的亲身实践,主要描述了Julia集和Mandelbrot集这两个最典型的分形集的数学模型,以及如何在计算机上生成相应的分形图形;在此基础上介绍了分形图形生成的一些相关技术,包括对已生成分形图形的着色、放大等.
【总页数】4页(P47-50)
【作者】蔡葵
【作者单位】咸宁学院,计算机系,湖北,咸宁,437005
【正文语种】中文
【中图分类】TP391.41
【相关文献】
1.等相关峰综合鉴别函数的编码方法及计算机生成 [J], 李英华
2.等相关峰综合鉴别函数的编码方法及计算机生成 [J], 李英华
3.分形图形的计算机生成 [J], 安肇琰
4.分形图形的计算机生成 [J], 王耀辉;李帆
5.迭代函数系统(IFS)法的分形图形技术在丝绸纹样上的应用 [J], 朱海祥;刘婧;戴绘瑶;卞毓颖;宗林
因版权原因,仅展示原文概要,查看原文内容请购买。
计算机形学曲线与曲面的生成与绘制算法计算机形学中的曲线与曲面生成与绘制算法是图形学领域中的关键技术之一。
利用算法可以生成各种各样的曲线与曲面,用于创建、编辑和渲染三维模型。
本文将介绍几种常见的曲线与曲面生成与绘制算法。
一、贝塞尔曲线与贝塞尔曲面算法贝塞尔曲线与贝塞尔曲面是计算机形学中最常用的曲线与曲面表示方法之一。
贝塞尔曲线与曲面基于一组控制点,通过调整这些控制点的位置和权重,可以生成平滑且可控制形状的曲线与曲面。
1. 贝塞尔曲线算法贝塞尔曲线算法通过使用插值多项式来定义曲线。
一阶贝塞尔曲线由两个控制点定义,而二阶贝塞尔曲线则需要三个控制点。
一般而言,n阶贝塞尔曲线需要n+1个控制点。
通过调整控制点的位置和权重,可以生成不同形状的贝塞尔曲线。
2. 贝塞尔曲面算法贝塞尔曲面算法是在二维情况下的推广,可以用于生成三维曲面。
类似于贝塞尔曲线,贝塞尔曲面也是通过在空间中插值来生成的。
通过调整控制点的位置和权重,可以创造出各种形状的曲面。
贝塞尔曲面常用于建模和渲染三维物体。
二、B样条曲线与曲面算法B样条曲线与曲面是另一种重要的曲线与曲面表示方法。
与贝塞尔曲线相比,B样条曲线具有更高的灵活性和平滑性。
B样条曲线通过使用基函数的加权和来定义曲线。
不同的基函数产生不同的曲线形状。
1. B样条曲线算法B样条曲线算法中,每个控制点都有一个与之关联的基函数,通过调整控制点的位置和权重,可以改变曲线的形状。
B样条曲线可以用于在三维空间中创建平滑的曲线,被广泛应用于计算机辅助设计和动画制作等领域。
2. B样条曲面算法B样条曲面算法是在二维情况下的推广,可以用于生成三维曲面。
B样条曲面通过在两个方向上使用基函数的加权和来定义曲面。
通过调整控制点的位置和权重,可以实现曲面的形状调整。
B样条曲面广泛应用于计算机辅助设计、虚拟现实和游戏开发等领域。
三、其他曲线与曲面生成与绘制算法除了贝塞尔曲线和B样条曲线,还存在其他一些曲线和曲面生成与绘制算法,如NURBS曲线与曲面算法、Catmull-Rom曲线与曲面算法等。
实验六分形图的生成
班级08信计二学号52 姓名刘丽杰分数
一、实验目的和要求:
1、掌握分形基本原理,熟悉分形的计算机模拟算法。
2、学习调试程序及分析运行结果。
3、上机操作迭代函数系统算法。
二、实验内容:
1、编程实现分形的贝塞尔算法,并输出图形。
2、编程实现一棵树,先按某一方向画一条直线段,然后在此线段上找到一系列节点,在每一节点处向左右偏转60度各画一条分支。
节点位置和节点处所画分支的长度的比值各按0.618分割。
三、程序执行和运行结果:
1、贝塞尔程序:
#include <graphics.h>
#include <conio.h>
#define WIDTH 640
#define HEIGHT 480
#define NUMPTS 6
HDC hdc;
float animpts[NUMPTS * 2];
float deltas[NUMPTS * 2];
void Init()
{
for (int i = 0; i < NUMPTS * 2; i += 2)
{
animpts[i ] = (float)rand() / RAND_MAX * WIDTH;
animpts[i + 1] = (float)rand() / RAND_MAX * HEIGHT;
deltas[i ] = (float)rand() / RAND_MAX * 4 + 2;
deltas[i + 1] = (float)rand() / RAND_MAX * 4 + 2;
if (animpts[i ] > WIDTH / 6.0f) deltas[i ] = -deltas[i ];
if (animpts[i + 1] > HEIGHT / 6.0f) deltas[i + 1] = -deltas[i + 1];
}
}
void Animate(float pts[], float deltas[], int index, int limit)
{
float newpt = pts[index] + deltas[index];
if (newpt <= 0)
{
newpt = -newpt;
deltas[index] = (float)rand() / RAND_MAX * 3 + 2;
}
else if (newpt >= (float)limit)
{
newpt = 2.0f * limit - newpt;
deltas[index] = -((float)rand() / RAND_MAX * 3 + 2);
}
pts[index] = newpt;
}
void Run()
{
int i;
for (i = 0; i < NUMPTS * 2; i += 2)
{
Animate(animpts, deltas, i , WIDTH);
Animate(animpts, deltas, i + 1, HEIGHT);
}
float* ctrlpts = animpts;
int len = NUMPTS * 2;
float prevx = ctrlpts[len - 2];
float prevy = ctrlpts[len - 1];
float curx = ctrlpts[0];
float cury = ctrlpts[1];
float midx = (curx + prevx) / 2.0f;
float midy = (cury + prevy) / 2.0f;
MoveToEx(hdc, (int)midx, (int)midy, NULL);
for (i = 2; i <= len; i += 2)
{
float x1 = (midx + curx) / 2.0f;
float y1 = (midy + cury) / 2.0f;
prevx = curx;
prevy = cury;
if (i < len)
{
curx = ctrlpts[i ];
cury = ctrlpts[i + 1];
}
else
{
curx = ctrlpts[0];
cury = ctrlpts[1];
}
midx = (curx + prevx) / 2.0f;
midy = (cury + prevy) / 2.0f;
float x2 = (prevx + midx) / 2.0f;
float y2 = (prevy + midy) / 2.0f;
POINT param[] = {(int)x1, (int)y1, (int)x2, (int)y2, (int)midx, (int)midy};
PolyBezierTo(hdc, param, 3);
}
}
void main()
{
initgraph(WIDTH, HEIGHT);
hdc = GetImageHDC();
Init();
BeginBatchDraw();
while (!kbhit())
{
cleardevice();
Run();
FlushBatchDraw();
Sleep(15);
}
EndBatchDraw();
getch();
closegraph();
}
运行结果:
2、程序:
#define g 0.618
#define PAI 3.1416
#include”graphics.h”
#include”math.h”
#include”stdio.h”
#include”conio.h”
float thita=6.0;
void grow(int x,int y,float lenth,float fai)
{
int x1,y1;
int nx,ny,count;
float nlenth;
x1=x+lenth*cos(fai*PAI/180.0);
y1=y-lenth*sin(fai*PAI/180.0);
line(x,y,x1,y1);
if(lenth<10)
return;
nlenth=lenth;
nx=x;
ny=y;
for(count=0;count<7;count++)
{
nx=nx+nlenth*(1-g)*cos(fai*PAI/180.0);
ny=ny-nlenth*(1-g)*sin(fai*PAI/180.0);
grow(nx,ny,nlenth*(1-g),fai+thita);
grow(nx,ny,nlenth*(1-g),fai-thita);
nlenth*=g;
}
}
void main()
{
int gm,gd;
detectgraph(&gd,&gm);
initgraph(&gd,&gm,””);
grow(300,300,280.0,90.0);
getch();
closegraph();
}
运行结果:
四、实验结果分析:
分形的对称性即表现了传统几何的上下、左右及中心对称。
同时它的自相似性又揭示了一种新的对称性,即画面的局部与更大范围的局部的对称,或说局部与整体的对称。
它是大小比例的对称,即系统中的每一元素都反映和含有整个系统的性质和信息。
从数学上来讲,曼德布洛特集合是一个复数的集合。
曼德布洛特集合就是使以上序列不延伸至无限大的所有c点的集合。
.Mandelbrot 集合图形的边界处,具有无限复杂和精细的结构。
如果计算机的精度是不受限制的话,可以无限地放大她的边界。
当放大某个区域,它的结构就在变化,展现出新的结构元素。
这正如前面提到的"蜿蜒曲折的一段海岸线",无论怎样放大它的局部,它总是曲折而不光滑,即连续不可微。
如果把所有不同的Julia 集重合起来,我们将会得到一个四维图形,它的其中两个维度是不同的初始值z 构成的复平面,另外两个维度则是不同的常数 c 构成的复平面。
这个四维空间就包含了所有不同的初始值在所有不同的常数 c 之下迭代的发散情况。
而Mandelbrot 集,则是这个四维图形在c = 0 处的一个切片,并且是最具有概括力的一个切片。
因此,我们相当于有了Mandelbrot 集的一个四维扩展,从这个四维图形中,我们可以切出很多二维的或者三维的切片,得到更多惊人而漂亮的图形。