分形图程序
计算机图形学 分形图的生成
实验六分形图的生成班级 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();}程序截图:四、实验结果分析分形的对称性即表现了传统几何的上下、左右及中心对称。
多重分形谱程序
多重分形谱程序是一种用于分析复杂数据集的算法,它可以用来描述数据集中的不同尺度的结构和特征。
这种算法能够处理不同尺度上的变化和复杂性,并提供了一种有效的方式来描述和比较不同数据集的相似性和差异性。
多重分形谱程序的基本原理是通过计算数据集中不同尺度的子集的分布情况,来提取出数据集中的多重分形特征。
具体来说,它通过将数据集分成若干个子集,并计算每个子集的分布情况,然后利用这些分布情况来计算多重分形谱。
多重分形谱程序在许多领域都有广泛的应用,包括物理、生物学、医学、地理学和经济学等。
它可以用于描述各种复杂系统的结构和行为,例如股票市场的波动、地震活动的分布、人类语言的使用情况等。
要实现多重分形谱程序,需要编写相应的程序代码。
具体的实现方式可能会因不同的编程语言和工具而有所不同,但基本的思路是相似的。
一般来说,实现多重分形谱程序需要以下几个步骤:1.定义数据集:首先需要定义要分析的数据集,可以是数字、文本、图像等各种形式的数据。
2.分割数据集:将数据集分成若干个子集,每个子集包含一定数量的数据点。
子集的划分方式可以根据具体情况而定,例如可以按照大小、时间等维度进行划分。
3.计算子集的分布情况:对于每个子集,可以计算其分布情况,例如频率、概率等。
具体的计算方法可以根据数据类型和问题背景而定。
4.计算多重分形谱:利用子集的分布情况,可以计算出多重分形谱。
多重分形谱是一种描述数据集中不同尺度上的结构和特征的数学工具,可以通过特定的公式进行计算。
5.分析结果:根据计算出的多重分形谱,可以对数据集进行深入的分析和比较,例如寻找相似性和差异性、预测未来的趋势等。
总的来说,多重分形谱程序是一种强大的算法,可以用于处理和分析各种复杂的数据集。
但是,由于它涉及到一些数学和计算方面的知识,因此需要一定的专业背景和技能来理解和实现。
图形学实验一 三维分形(附源代码)
实验报告实验名称:三维分形算法姓名:陈怡东学号:09008406程序使用说明:程序打开后会呈现出3次分形后的四面体,因为考虑到观察效果的清晰所以就用了3次分形作为演示。
与用户的交互:1键盘交互:分别按下键盘上的数字键1,2,3,4可以分别改变四面体的4个面的颜色。
按下字母c(不区别大小写)可以改变视图函数,这里循环切换3种视图函数:glOrtho,glFrustum,gluPerspective,但是改变视图函数后要窗口形状变化后才能显现出来按下字母键q(不区别大小写)可以退出程序2鼠标交互:打开后在绘图的区域按下鼠标左键不放便可以拖动图形的视角,这里为了展现图形的3D效果因此固定了其中一点不放,这样就可以看到3D的效果。
鼠标右击则有弹出菜单显示,其中改变颜色则是同时改变4个面的颜色,本程序中运用了8组配色方案。
改变视图函数也是上述的3种函数,这里的效果立刻显现,但是还有很多问题达不到所要的效果,希望老师能帮忙解决一下。
设计思路:分形算法:把四面体细分成更小的四面体,先找出其6个棱的中点并连接起来,这样就在4个顶点处各有一个小的四面体,原来四面体中剩下的部分应当去掉。
仿效二维的生成方法,我们对保留的四个小四面体进行迭代细分。
这样细分结束后通过绘制4个三角形来绘制每一个剩下的四面体。
交互的实现:键盘交互,即通过对按键的响应写上响应函数实现对视图和颜色的改变。
鼠标交互:通过对鼠标左右按键的实现:该部分只做了必要的介绍,具体实现见代码(附注释)分形算法:void tetra(GLfloat *a,GLfloat *b,GLfloat *c,GLfloat *d)函数实现的是绘制四面体并且给四个面绘上不同的颜色。
以区别开来,函数的实现细节见代码,有注释介绍。
void triangle3(GLfloat *a,GLfloat *b,GLfloat *c)函数用来绘制每个平面细分后的三角形。
其中顶点设置为3维坐标glVertex3fv(a);void divide_tetra(GLfloat *a,GLfloat *b,GLfloat *c,GLfloat *d,int m)细分四面体的函数实现。
分形图形与分形的产生
分形图形分形理论是非线性科学的主要分支之一,它在计算机科学、化学、生物学、天文学、地理学等众多自然科学和经济学等社会科学中都有广泛的应用。
分形的基本特征是具有标度不变性。
其研究的图形是非常不规则和不光滑的已失去了通常的几何对称性;但是,在不同的尺度下进行观测时,分形几何学却具有尺度上的对称性,或称标度不变性。
研究图形在标度变换群作用下不变性质和不变量对计算机图形技术的发展有重大的意义。
说到分形(fractal),先来看看分形的定义。
分形这个词最早是分形的创始人曼德尔布诺特提来的,他给分形下的定义就是:一个集合形状,可以细分为若干部分,而每一部分都是整体的精确或不精确的相似形。
分形这个词也是他创造的,含有“不规则”和“支离破碎”的意思。
分形的概念出现很早,从十九世纪末维尔斯特拉斯构造的处处连续但处处不可微的函数,到上个世纪初的康托三分集,科赫曲线和谢尔宾斯基海绵。
但是分形作为一个独立的学科被人开始研究,是一直到七十年代曼德尔布诺特提出分形的概念开始。
而一直到八十年代,对于分形的研究才真正被大家所关注。
分形通常跟分数维,自相似,自组织,非线性系统,混沌等联系起来出现。
它是数学的一个分支。
我之前说过很多次,数学就是美。
而分形的美,更能够被大众所接受,因为它可以通过图形化的方式表达出来。
而更由于它美的直观性,被很多艺术家索青睐。
分形在自然界里面也经常可以看到,最多被举出来当作分形的例子,就是海岸线,源自于曼德尔布诺特的著名论文《英国的海岸线有多长》。
而在生物界,分形的例子也比比皆是。
近20年来,分形的研究受到非常广泛的重视,其原因在于分形既有深刻的理论意义,又有巨大的实用价值。
分形向人们展示了一类具有标度不变对称性的新世界,吸引着人们寻求其中可能存在着的新规律和新特征;分形提供了描述自然形态的几何学方法,使得在计算机上可以从少量数据出发,对复杂的自然景物进行逼真的模拟,并启发人们利用分形技术对信息作大幅度的数据压缩。
牛顿迭代分形
牛顿迭代分形牛顿迭代分形,也被称为牛顿分形或牛顿法则,是一种基于数学原理的图像生成算法。
它利用牛顿迭代的思想和复数运算,通过不断迭代计算,可以生成一幅幅美丽而神奇的分形图形。
牛顿迭代分形的生成过程可以简单描述如下:首先,选择一个复数作为初始值,然后通过不断迭代计算来寻找该复数的根。
根据牛顿迭代法的原理,我们可以得到下一个近似根的值,然后再将该值作为新的初始值进行迭代计算,直到达到预设的迭代次数或者满足停止条件。
最终,我们可以将迭代过程中的所有值映射到一个二维平面上,从而生成一张牛顿迭代分形图。
牛顿迭代分形的生成过程中,不同的初始值会产生不同的分形图形。
在分形图中,我们可以看到许多迭代过程中的轨迹,这些轨迹形成了分形的结构。
分形通常具有自相似性,即无论观察整个图像还是它的一部分,都会发现相似的形态或图案。
牛顿迭代分形在数学研究、计算机图形学、艺术创作等领域都有广泛的应用。
它不仅可以帮助我们理解复数和迭代的概念,还可以产生出许多美丽而复杂的图像。
这些图像不仅能够为我们提供视觉上的享受,还可以激发我们对数学和艺术的兴趣。
通过牛顿迭代分形的创作过程,我们可以感受到数学的魅力和无穷的可能性。
每一次的迭代计算,都是在数学的世界中进行探索和发现。
而每一张生成的分形图像,都是对数学美的一次呈现和诠释。
当我们深入探索牛顿迭代分形时,我们会发现其中隐藏着无限的奥秘和惊喜。
这些分形图像不仅令人惊叹,还能够启发我们对数学和艺术的思考。
通过创作和欣赏牛顿迭代分形,我们可以感受到数学的美妙和艺术的魅力,同时也能够培养我们的创造力和思维能力。
牛顿迭代分形是一种令人着迷的图像生成算法。
它不仅展示了数学的美丽和复杂性,还激发了我们对数学和艺术的兴趣。
通过创作和欣赏牛顿迭代分形,我们可以感受到数学的魅力和艺术的魔力,同时也能够培养我们的创造力和思维能力。
让我们一起沉浸在牛顿迭代分形的世界中,探索数学与艺术的交汇之处!。
Koch分形雪花图的面积计算
Koch 分形雪花图的面积计算一、问题叙述分形几何图形最基本的特征是自相似性,这种自相似性是指局部与整体在形态、功能、信息、时间、空间等方面具有统计意义上的相似。
在具有自相似性的图形中,图形局部只是整体的缩影,而整体图形则是局部的放大。
而本文我们要分析的是Koch 分形雪花图,包含以下三个问题:1.描述Koch 分形雪花2.证明Koch 分形雪花图K n 的边数为n 1L 34n -=⨯3.求Koch 分形雪花图的面积(数据),求n n lim Area(K )→∞二、问题分析在分析Koch 分形雪花图之前,我们首先介绍Koch 分形曲线。
Koch 分形曲线的绘制原理是:从一条直线段开始,将线段中间的三分之一部分用一个等边三角形的两边代替,形成四条线段的折线,如图2.1所示:图2.1 对一条线段进行第一次Koch 分形然后,对形成的四条直线段的每一条的中间的三分之一部分用等边三角形的两边代替,形成十六条线段的折线。
这种迭代继续进行下去可以形成Koch 分形曲线。
在迭代过程中,图形中的点数将越来越多,而曲线的最终显示细节的多少将取决于迭代次数和显示系统的分辨率。
设P1和P2分别是原始的两个端点,现在需要在直线段的中间依次插入点Q1,Q2,Q3以产生第一次迭代图形。
显然,Q1位于P1右端直线段的三分之一处,Q3位于P1点右端直线段的三分之二处,而Q2点的位置可以看作由Q3绕Q1逆时针旋转60度而得到的,故可以处理Q Q 13经过正交变换而得到Q Q 12。
算法如下:(1)Q1P1+P P Q P1+P P /3;←←(2-1)/3;32(2-1)(2)T Q2Q1+Q3-Q A ←⨯(1); (3)P5P2P2Q1P3Q P Q3←←←←;;2;4。
在算法中,用正交矩阵A 构造正交变换,其功能作用是对向量作旋转,使之成为长度不变的另一向量。
在绘制Koch 曲线的过程中,取旋转的角度为3π,则正交矩阵A 应取为:cos()sin()33A=sin()cos()33ππππ⎛⎫- ⎪⎪ ⎪ ⎪⎝⎭ 1.Koch 分形雪花的描述Koch 分形雪花的原始图形是等边三角形,它是由三条相等的线段围成的三角形。
分形工艺 north
分形工艺 north分形工艺(North)是一种美学和技术的混合体,借助计算机制造出复杂而美丽的分形物品。
它通过将自相似的图案无限缩放,使人们惊叹于其非凡的风格和精细的细节。
这种工艺的演变始于20世纪60年代,但直到近年来才普及,因为计算机的不断发展和艺术家的创意。
本文将介绍分形工艺的基本概念和发展历程、工艺过程和流程,以及它在当今世界中的应用和前景。
分形工艺的概念和发展历程分形是一种几何形状,它的非凡特点是具有自相似性,即一部分的形状和整体的形状可以无限重复。
分形的发现者是法国数学家曼德博,他在1961年发表了一篇论文,该论文中提到了著名的曼德博集(Mandelbrot set),这是一个非常有趣的数学对象,它由简单规则生成,却有着复杂的形态和较为难以想象的结构。
在随后的几十年里,许多数学家、物理学家、艺术家和程序员都对分形进行了研究,探索这种美丽而神秘的几何形态和其它潜在的应用。
50年代末,CG技术日益成熟,越来越多的艺术家、设计师和工程师开始借助计算机进行数字制图、数字造型和可视化设计。
分形也融入了计算机艺术的圈子,为艺术家提供了新的工具和创意的空间。
20世纪80年代,分形成为数字图形学领域的一个热门话题,在计算机游戏、电影特效、虚拟现实等领域得到广泛应用。
同时,分形也启发了很多艺术家,如吉姆.布莱德、肯.希里卡、罗伯特.康迪迪、约翰.S.霍普金斯等,他们的作品被称为“分形艺术”,并且在艺术界和科学界获得了重要的地位。
1990年代与21世纪前十年是计算机技术和软件的迅猛发展时期,图形处理、三维建模、数字雕塑等技术已经非常成熟,艺术家有了更高妙的灵感和更多的创造力。
与此同时,分形艺术也不断创新,分形图案的生成、转化、模拟、渲染等方面也得到了更多精细的处理。
分形工艺在这些前提下被发掘而广为人知,其优美繁复的图案和科学技术的共同融合,让人们感觉到一种宏伟的视觉冲击,也极大的拓宽了人类的想象空间。
曼德勃罗集合分形图案
曼德勃罗集合分形图案三、曼德勃罗集合(Mandelbrot Set)曼德勃罗集合(Mandelbrot Set)或曼德勃罗复数集合,是⼀种在复平⾯上组成分形的点的集合,因由曼德勃罗提出⽽得名。
曼德博集合可以使复⼆次多项式进⾏迭代来获得。
其中,c是⼀个复参数。
对于每⼀个c,从z = 0 开始对f c(z)进⾏迭代。
序列的值或者延伸到⽆限⼤,或者只停留在有限半径的圆盘内(这与不同的参数c有关)。
曼德布洛特集合就是使以上序列不延伸⾄⽆限⼤的所有c点的集合。
最后,我们给出⼀个利⽤C语⾔⽣成Mandelbrot集合并绘制图形的程序(该程序来⾃⽂献【1】):#include <stdio.h>#include <stdlib.h>#include <complex.h>#define width_size 800#define height_size 600#define Maxval 255static const float orig_x = width_size * 2/3;static const float orig_y = height_size * 1/2;static const pixel dim_gray = { 105, 105, 105 };typedef struct _pixel {unsigned char r;unsigned char g;unsigned char b;} pixel;static unsigned char iteration(int x, int y){const int limit = Maxval + 1;int i;complex c = ((x - orig_x) / (width_size / 3)) +((orig_y - y) / (height_size / 2)) * I;complex z = 0;for (i = 0; i < limit; i++) {/* basic formula */z = z * z + c;if (creal(z) > 2 || cimag(z) > 2)break;}return (unsigned char) (i == limit ? 0 : i);}int main(){FILE *f = fopen("mandelbrot.ppm", "w+");/* PPM header */fprintf(f,"P6\n"/* PPM magic number */"#Mandelbrot Set\n""%d "/* width, in ASCII decimal */"%d\n"/* height, in ASCII decimal */"%d\n", /* maximum color value, in ASCII decimal */width_size, height_size, Maxval);/* Write every pixel generated by Mandelbrot Set */for (int i = 0; i < height_size; i++) {for (int j = 0; j < width_size; j++) {unsigned char iter = iteration(j, i);if (iter) {pixel p = {.r = iter,.g = (float) abs(j - orig_x) / width_size * Maxval,.b = (float) abs(i - orig_y) / height_size * Maxval };fwrite(&p, sizeof(pixel), 1, f);} else {fwrite(&dim_gray, sizeof(pixel), 1, f);}}}fclose(f);return0;}上述程序所⽣成的图像结果如下图所⽰,需要补充说明的是:该图像⽂件格式为ppm,在Windows下你可以使⽤Photoshop 来查看这种类型的图像⽂件,在OS X系统下你可以使⽤免费的GIMP软件来查看它。
分形c程序
分形图案分形图是一种较为流行的艺术图形。
所谓分形,就是指组成部分与整体以某种方式相似,局部放大后可以在某种程度上再现整体,如图25所示,为一颗树的分形图,该树是由一些分支构成的,就其中某个分支来看,它具有与整颗树相似的形状。
绘制的原则是,先按某一方向画一条直线,然后在此线段上找到一系列节点,在每一个节点处向左、右偏转60度各画一条分支。
节点位置和节点处所画分支的长度比值按0.618分割。
/*分形图案1 QW41.C*/#define g 0.618#define PAI 3.14#include <graphics.h>#include<math.h>#include<stdio.h>#include<conio.h>float thita=60.0;void grow(int x,int y,float lenth,float fai);void main(){int gm,gd;detectgraph(&gd,&gm);initgraph(&gd,&gm,"\\tc\\bgi");grow(300,300,280.0,90.0);getch();closegraph();}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;}}运行结果如下:------------------------------------------------------------------------------------2、分形图案2此例中也是一个分形图案。
经典的分形算法 (1)
经典的分形算法小宇宙2012-08-11 17:46:33小宇宙被誉为大自然的几何学的分形(Fractal)理论,是现代数学的一个新分支,但其本质却是一种新的世界观和方法论。
它与动力系统的混沌理论交叉结合,相辅相成。
它承认世界的局部可能在一定条件下,在某一方面(形态,结构,信息,功能,时间,能量等)表现出与整体的相似性,它承认空间维数的变化既可以是离散的也可以是连续的,因而拓展了视野。
分形几何的概念是美籍法国数学家曼德布罗(B.B.Mandelbrot)1975年首先提出的,但最早的工作可追朔到1875年,德国数学家维尔斯特拉斯(K.Weierestrass)构造了处处连续但处处不可微的函数,集合论创始人康托(G.Cantor,德国数学家)构造了有许多奇异性质的三分康托集。
1890年,意大利数学家皮亚诺(G.Peano)构造了填充空间的曲线。
1904年,瑞典数学家科赫(H.von Koch)设计出类似雪花和岛屿边缘的一类曲线。
1915年,波兰数学家谢尔宾斯基(W.Sierpinski)设计了象地毯和海绵一样的几何图形。
这些都是为解决分析与拓朴学中的问题而提出的反例,但它们正是分形几何思想的源泉。
1910年,德国数学家豪斯道夫(F.Hausdorff)开始了奇异集合性质与量的研究,提出分数维概念。
1928年布利干(G.Bouligand)将闵可夫斯基容度应用于非整数维,由此能将螺线作很好的分类。
1932年庞特里亚金(L.S.Pontryagin)等引入盒维数。
1934年,贝塞考维奇(A.S.Besicovitch)更深刻地提示了豪斯道夫测度的性质和奇异集的分数维,他在豪斯道夫测度及其几何的研究领域中作出了主要贡献,从而产生了豪斯道夫-贝塞考维奇维数概念。
以后,这一领域的研究工作没有引起更多人的注意,先驱们的工作只是作为分析与拓扑学教科书中的反例而流传开来。
真正令大众了解分形是从计算机的普及肇始,而一开始,分形图的计算机绘制也只是停留在二维平面,但这也足以使人们心驰神往。
电子科技大学数学实验实验报告(含详细程序和实验数据)-Koch分形雪花,计算瑞典国土,计算我国海岸线长度
Koch 分形雪花面积计算的数学实验报告2012年4月6日绘制Koch 分形雪花,分析其边数及面积规律实验内容取周长为10的正三角形为初始元。
第一步(N=1):将边长三等分,并以中间的一份为底边构造正三角形,去掉该三角形的底边,将两腰与剩下的两份相连,得到生成元。
原三角形每条边都用生成元替换,得到具有6个凸顶点的12边形。
第二步(N=2):对第1步得到的图形,同样将其边长三等分,并以中间的一份构造正三角形,去掉该三角形的底边,将两腰与两边的两份相连,得到生成元。
原12边形的每条边都用生成元替换,得到24个凸顶点的48边形。
如此方法,一直做下去,当∞→N 时便得到了Koch 分形雪花。
实验目的1.算法描述Koch 分形雪花2.证明Koch 分形雪花图Kn 的边数为143-⨯=n n L3.求Koch 分形雪花图Kn 的面积)(lim n N K area ∞→实验原理1. Koch 分形雪花的绘制过程与Koch 曲线的构造过程类似。
事实上,Koch 分形雪花是由三条三次Koch 曲线组成的。
Koch 曲线的构造:由一条线段产生四条线段,由n 条线段迭代一次后将产生4n 条线段,算法针对每一条线段逐步进行,将计算新的三个点。
第一个点位于线段的三分之一处,第三个点位于线段的三分之二处,第二个点以第一个点为轴心,将第一和第三个点形成的向量正向旋转ο60而得,正向旋转由正交矩阵⎪⎭⎪⎬⎫⎪⎩⎪⎨⎧-3cos 3sin 3sin3cos ππππ完成。
三条三条三次Koch 曲线由初始向量P 构造。
流程图如下:⑴)/3P -2(P + P ←Q )/3;P -(P + P ← Q 121 31211 ⑵;A ×)Q -(Q + Q ← Q T1312 ⑶.Q ← P ;Q ← P ;Q ← P ;P ← P 342312252.由于Koch分形雪花是封闭的凸多边形,所以边数=顶点数=P矩阵的行数-1。
turtle练习题
turtle练习题一、基础操作1. 编写一个Python程序,使用turtle库绘制一个边长为100像素的正方形。
2. 编写一个Python程序,使用turtle库绘制一个半径为50像素的圆形。
3. 编写一个Python程序,使用turtle库绘制一个等边三角形,边长为120像素。
4. 编写一个Python程序,使用turtle库绘制一个五角星,每个内角为36度。
5. 编写一个Python程序,使用turtle库绘制一个心形图案。
二、颜色与填充6. 编写一个Python程序,使用turtle库绘制一个带有红色边框和蓝色填充的正方形。
7. 编写一个Python程序,使用turtle库绘制一个带有绿色边框和黄色填充的圆形。
8. 编写一个Python程序,使用turtle库绘制一个带有紫色边框和粉色填充的等边三角形。
9. 编写一个Python程序,使用turtle库绘制一个带有橙色边框和金色填充的五角星。
10. 编写一个Python程序,使用turtle库绘制一个带有黑色边框和白色填充的心形图案。
三、运动控制11. 编写一个Python程序,使用turtle库让小海龟向前移动200像素,然后左转90度,再向前移动200像素。
12. 编写一个Python程序,使用turtle库让小海龟画一个边长为150像素的正方形,每画完一条边就右转90度。
13. 编写一个Python程序,使用turtle库让小海龟画一个半径为100像素的圆形,然后隐藏小海龟。
14. 编写一个Python程序,使用turtle库让小海龟画一个等边三角形,每边长为120像素,每个内角为120度。
15. 编写一个Python程序,使用turtle库让小海龟画一个五角星,每个内角为36度,然后清除画布。
四、高级功能16. 编写一个Python程序,使用turtle库绘制一个动态的正方形旋转动画。
17. 编写一个Python程序,使用turtle库绘制一个动态的圆形旋转动画。
多重分形谱程序
多重分形谱程序多重分形谱(multifractal spectrum)是一种用于描述分形几何结构的方法。
分形几何是一种利用自相似性原理描述物体或图形的数学模型,具有在各种尺度上都具有相似性的特征。
多重分形谱可以揭示物体或图形在不同尺度上的分形特征,从而更全面地理解其内在结构。
多重分形谱的基本思想是通过计算不同尺度下的分形维数,从而得到一个描述分形结构的谱。
该谱可用于分析各个尺度上的分形特征,如分形维数量化了分形的粗糙程度和纹理的丰富性。
通过分析多重分形谱,可以揭示材料、图像等领域的复杂结构和非线性行为。
多重分形谱的计算步骤如下:1.选择一个合适的分形特征:多重分形谱适用于描述具有不同分形特征的物体,如分形纹理、分形信号等。
2.确定尺度:通过改变分析尺度,可以得到不同粗糙度下的分形特征。
通常使用尺度区间来表示不同的尺度。
3.计算分形维数:选择一个分形维数测量方法,如盒计数法、分形能量法等,计算不同尺度下的分形维数。
4.构建多重分形谱:将得到的分形维数按照尺度进行排序,并绘制成图谱。
多重分形谱通常呈现出一个上升或下降的曲线,反映了分形结构的变化趋势。
多重分形谱广泛应用于物理、材料科学、地质学、图像处理等领域,例如分析复杂材料的纹理特征、识别图像中的纹理类型等。
它不仅可以在定性上描述物体的分形特征,还可以量化分形结构的不同方面,如分形维数的变化范围、分形结构的复杂程度等。
多重分形谱在实际应用中也面临一些挑战和限制。
首先,计算多重分形谱需要大量的数据和计算资源,对于大规模数据和高分辨率图像可能存在计算效率问题。
其次,选择合适的分形维数测量方法对结果的准确性和可靠性有着重要影响,需要根据具体问题选择适合的方法。
总之,多重分形谱是一种重要的分形分析方法,能够揭示物体或图形在不同尺度上的分形特征。
通过分析多重分形谱,我们可以更全面地了解分形结构的内在性质和复杂行为,为材料科学、图像处理等领域的研究提供了一个有力的工具。
光学分形实验报告
分形图形学实验报告指导实验报告要求1. 实验名称2. 实验目的、要求3. 实验主要内容(某某算法的实现)4. 实验过程(程序流程图、源代码)5. 实验结果(附上打印的图形)6. 实验小结实验报告一一般分形图形生成实验目的1. koch曲线、sierpinski三角形、cantor集的计算机实现2. 掌握用迭代、递归生成分形实验内容及步骤1、 koch曲线函数:plot(x1,y1) –(x2,y2) (画直线函数)sin( ) (正弦函数)cos( ) (余弦函数)arctan( ) (反正切函数)12、 sierpinski三角形函数: plot(x1,y1) –(x2,y2) (画直线函数)sin( ) (正弦函数)cos( ) (余弦函数)23、 cantor集3实验报告二 l系统语言生成分形图形实验目的1. 掌握用l系统语言生成分形2. koch曲线、sierpinski三角形、cantor集的l系统实现4实验内容及步骤1. 编写程序用l系统语言生成分形图形1) 编写程序生成koch曲线:初始图形是一条线段,生成过程是将线段中间1/3向外折起。
程序伪码如下:kochcurve { ;柯赫曲线angle 6 ;角度增量是60°axiom f ;初始图形是一单位线段f=f+f--f+f ;产生式是将线段中间1/3折起} ;结束2) 用l系统再次生成sierpinski三角。
生成sierpinski三角的伪码如下:hilbert{ ;sierpinski三角,1996-12 angle 4 axiom y ;初始串为任意字母y x=-yf+xfx+fy- ;第一个生成规则y=+xf-yfy-fx+ ;第二个生成规则,由以上规则不断代换 } 3) 模拟草本植物。
注意这里出现了“括号”——可以方便地表示树枝,伪码如下:herbplant { ;生成植物,本程序使用了括号angle 14axiom zz=zfx[+z][-z]x=x[-fff][+fff]fx}5篇二:光学实验报告建筑物理——光学实验报告实验一:材料的光反射比、透射比测量实验二:采光系数测量实验三:室内照明实测实验小组成员:指导老师:日期:2013年12月3日星期二实验一、材料的光反射比和光透射比测量一、实验目的与要求室内表面的反射性能和采光口中窗玻璃的透光性能都会直接或间接的影响室内光环境的好坏,因此,在试验现场采光实测时,有必要对室内各表面材料的光反射比,采光口中透光材料的过透射比进行实测。
分形的大规模二分演化算法与程序设计
界 整 齐 的 平 滑 曲 面 , 些 工 具 在 描 述 一 些 抽 象 图形 或 人 造 物 体 这
的 形 态 时 是 非 常 有 力 的 , 对 一 些 复 杂 的 自然 景 象 形 态 就 显 得 但 无 能 为 力 了 , 如 山 脉 的 形 状 、 折 的 海 岸 线 、 烁 的 火 焰 以及 诸 曲 闪 千 奇 百 怪 的 云 彩 、 浪 等 等 , 是 由 于从 欧 氏 几 何 来 看 , 们 是 海 这 它 极 端 无 规 则 的 。 于 这 些 复 杂 的 自然 景 象 却 可 用 分 形 几 何 学 来 对 较 好 地 描 述 。 于计 算 机 图 形 学 、 像 处 理 的 发 展 , 动 了分 形 由 图 推 几 何 学 的 发 展 , 形 几 何 和 计 算 机 图 形 两 者 的 结 合 , 生 了分 分 产 形 图 形 学 这 一 新 的 学科 。 形 在 描 绘 自然 景 物 、 成 奇 异 图 形 、 分 生 图 像 压 缩 等 方 面具 有 广 阔 的 应 用 前 景 , 而 得 到 了计 算 机 图形 因 学 研 究 领 域 人 员 的关 注 。 是 , 于 分 形 图 形 的 无 限 复杂 性 , 但 由 为 生 成 分 形 图形 所 需 的 计 算 量 往 往 很 大 , 其 是 对 一 些 规 模 较 大 尤 的 分 形 , 象 3 n ebo 集 、 l 集 的 生 成 有 时 需 要 几 个 小 D Ma dlrt J i ua
维普资讯
分 形 的大 规模 二分 演化 算 法与程序设 计
郭卫斌 王 能超 施保 昌
( 中科技 大 学计 算机 科 学与 技 术 学 院 , 汉 4 0 7 ) 华 武 3 0 4 z华 中科 技 大学并 行计 算研 究所 , ( 武汉 4 0 7 ) 3 0 4
基于VB的分形图形屏幕保护程序研究
w eb网站信息采集系统的设计方案叶君(南昌理工学院计算机系江西南昌330046)●一渊。
V A L L E J L信息科学【擅要】讨论乖j甩.N et技术、数据库技术,设计w eb网站信息的采集系统,并以某人才瞬站招聘信息的采集为饵。
说明实现过程。
提出基于-eb的信息采集系统的设计方案,并利用.N et技术与数据库技术,实现对特定网站信息的采集与处理。
【关键词】信息检索W E B技术A DO.N E T中图分类号:TP3文献标识码:A文章编号:1671--7597(2008)1120081--01随着w孵的发展,搜索引擎所提供的搜索和导航服务已经成为互联网上非常重要的网络服务,它的特点是能够帮助我们很快找到所需的网站或资料。
本文讨论利用.N e t技术、数据库技术,设计W eb网站信息的采集系统,并以某人才网站招聘信息的采集为例。
说明实现过程。
一、信息采集系统的设计(一)采集系统设计的思路首先,要采集指定网站的信息,必须了解信息的浏览方式,并记录相应的访问路径。
大多数网站采用动态网页技术(A S P、PH P等)构建,通过参数传递来检索数据库,输出对应信息的。
第二.采集所获的信息必须存入本地数据库。
需要对几个目标网站上的信息进行比较与分析。
得到统一的数据模型,并设计相应的数据表,便于将来对不同网站采集来的信息统一进行结构化。
第二,考虑到可能会对网站进行多次采集,要避免蕈复的信息存入自己的数据库内,同时霞复处理已经存在的信息也会降低采集系统的工作效率。
因此可以在记录每条信息的同时,记录其对应的U RL或相关I D,便于验证链接是否已经访问过。
(二)相关的技术1.请求/响应模型。
W e b应用是基于H T TP协议的客户端/服务器请求响应机制的信息交换,当我们在浏览器输入一个网址,需要经过建立连接、发送请求、发送响虑、关闭连接4个步骤,才能获得网贞信息。
在.N et框架的命名守间S yst em.N e t中提供了两个类W ebR e ques t和W eb R espon se,分别用来发送客户端请求和获取服务器返回的响应。
用程序实现一棵模拟树的分形图形
用程序实现一棵模拟树的分形图形
姚云霞
【期刊名称】《陇东学院学报》
【年(卷),期】2009(020)002
【摘要】通过编程动态生成一棵模拟树的分形图形,并对相应分形图形的算法实现进行了探讨。
【总页数】2页(P25-26)
【作者】姚云霞
【作者单位】陇东学院计算机科学与信息学院,甘肃庆阳745000
【正文语种】中文
【中图分类】TP315
【相关文献】
1.以折线为母线的自相似分形图形的程序实现
2.“一棵树远不止是一棵树”——从“三棵树”谈小学语文文本解读
3.一棵树摇动另一棵树——深度参与式城乡教师协同发展的实践与思考
4.一棵树摇动另一棵树一朵云推动另一朵云——关于初中数学课堂教学“云课堂”的几点探索
5.“一棵树摇动另一棵树,一朵云推动另一朵云”——我的班主任教育心得
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(1)Koch曲线程序koch.mfunction koch(a1,b1,a2,b2,n)%koch(0,0,9,0,3)%a1,b1,a2,b2为初始线段两端点坐标,n为迭代次数a1=0;b1=0;a2=9;b2=0;n=3;%第i-1次迭代时由各条线段产生的新四条线段的五点横、纵坐标存储在数组A、B中[A,B]=sub_koch1(a1,b1,a2,b2);for i=1:nfor j=1:length(A)/5;w=sub_koch2(A(1+5*(j-1):5*j),B(1+5*(j-1):5*j));for k=1:4[AA(5*4*(j-1)+5*(k-1)+1:5*4*(j-1)+5*(k-1)+5),BB(5*4*(j-1)+5*(k-1)+1:5*4*(j-1)+5*(k-1)+5)]=sub_koch1(w(k,1),w(k,2),w(k,3),w(k,4));endendA=AA;B=BB;endplot(A,B)hold onaxis equal%由以(ax,ay),(bx,by)为端点的线段生成新的中间三点坐标并把这五点横、纵坐标依次分别存%储在数组A,B中function [A,B]=sub_koch1(ax,ay,bx,by)cx=ax+(bx-ax)/3;cy=ay+(by-ay)/3;ex=bx-(bx-ax)/3;ey=by-(by-ay)/3;L=sqrt((ex-cx).^2+(ey-cy).^2);alpha=atan((ey-cy)./(ex-cx));if (ex-cx)<0alpha=alpha+pi;enddx=cx+cos(alpha+pi/3)*L;dy=cy+sin(alpha+pi/3)*L;A=[ax,cx,dx,ex,bx];B=[ay,cy,dy,ey,by];%把由函数sub_koch1生成的五点横、纵坐标A,B顺次划分为四组,分别对应四条折线段中%每条线段两端点的坐标,并依次分别存储在4*4阶矩阵k中,k中第i(i=1,2,3,4)行数字代表第%i条线段两端点的坐标function w=sub_koch2(A,B)a11=A(1);b11=B(1);a12=A(2);b12=B(2);a21=A(2);b21=B(2);a22=A(3);b22=B(3);a31=A(3);b31=B(3);a32=A(4);b32=B(4);a41=A(4);b41=B(4);a42=A(5);b42=B(5);w=[a11,b11,a12,b12;a21,b21,a22,b22;a31,b31,a32,b32;a41,b41,a42,b42];(2)Levy 曲线程序levy.mfunction levy(n)% levy(16),n为levy曲线迭代次数%x1,y1,x2,y2为初始线段两端点坐标,nn为迭代次数n=16;x1=0;y1=0;x2=1;y2=0;%第i-1次迭代时由各条线段产生的新两条线段的三端点横、纵坐标存储在数组X、Y中[X,Y]=levy1(x1,y1,x2,y2);for i=1:nfor j=1:length(X)/3w=levy2(X(1+3*(j-1):3*j),Y(1+3*(j-1):3*j));[XX(3*2*(j-1)+1:3*2*(j-1)+3),YY(3*2*(j-1)+1:3*2*(j-1)+3)]=levy1(w(1,1),w(1,2) ,w(1,3),w(1,4));[XX(3*2*(j-1)+3+1:3*2*(j-1)+3+3),YY(3*2*(j-1)+3+1:3*2*(j-1)+3+3)]=levy1(w (2,1),w(2,2),w(2,3),w(2,4));endX=XX;Y=YY;endplot(X,Y)hold onaxis equal%由以(x1,y1),(x2,y2)为端点的线段生成新的中间点坐标并把(x1,y1),(x2,y2)连同新点横、纵坐%标依次分别存储在数组X,Y中function [X,Y]=levy1(x1,y1,x2,y2)x3=1/2*(x1+x2+y1-y2);y3=1/2*(-x1+x2+y1+y2);X=[x1,x3,x2];Y=[y1,y3,y2];%把由函数levy1生成的三点横、纵坐标X,Y顺次划分为两组,分别对应两条折线段中每条线%段两端点的坐标,并依次分别存储在2*4阶矩阵w中,w中第i(i=1,2)行数字代表第i条线段%两端点的坐标function w=levy2(X,Y)a11=X(1);b11=Y(1);a12=X(2);b12=Y(2);a21=X(2);b21=Y(2);a22=X(3);b22=Y(3);w=[a11,b11,a12,b12;a21,b21,a22,b22];(3)分形树程序tree.hfunction tree(n,a,b)% tree(8,pi/8,pi/8),n为分形树迭代次数%a,b为分枝与竖直方向夹角%x1,y1,x2,y2为初始线段两端点坐标,nn为迭代次数n=8;a=pi/8;b=pi/8;x1=0;y1=0;x2=0;y2=1;plot([x1,x2],[y1,y2])hold on[X,Y]=tree1(x1,y1,x2,y2,a,b);hold onW=tree2(X,Y);w1=W(:,1:4);w2=W(:,5:8);% w为2^k*4维矩阵,存储第k次迭代产生的分枝两端点的坐标,% w的第i(i=1,2,…,2^k)行数字对应第i个分枝两端点的坐标w=[w1;w2];for k=1:nfor i=1:2^k[X,Y]=tree1(w(i,1),w(i,2),w(i,3),w(i,4),a,b);W(i,:)=tree2(X,Y);endw1=W(:,1:4);w2=W(:,5:8);w=[w1;w2];end%由每个分枝两端点坐标(x1,y1),(x2,y2)产生两新点的坐标(x3,y3),(x4,y4),画两分枝图形,并把%(x2,y2)连同新点横、纵坐标分别存储在数组X,Y中function [X,Y]=tree1(x1,y1,x2,y2,a,b)L=sqrt((x2-x1)^2+(y2-y1)^2);if (x2-x1)==0a=pi/2;else if (x2-x1)<0a=pi+atan((y2-y1)/(x2-x1));elsea=atan((y2-y1)/(x2-x1));endendx3=x2+L*2/3*cos(a+b);y3=y2+L*2/3*sin(a+b);x4=x2+L*2/3*cos(a-b);y4=y2+L*2/3*sin(a-b);a=[x3,x2,x4];b=[y3,y2,y4];plot(a,b)axis equalhold onX=[x2,x3,x4];Y=[y2,y3,y4];%把由函数tree1生成的X,Y顺次划分为两组,分别对应两分枝两个端点的坐标,并存储在一维%数组w中function w=tree2(X,Y)a1=X(1);b1=Y(1);a2=X(2);b2=Y(2);a3=X(1);b3=Y(1);a4=X(3);b4=Y(3);w=[a1,b1,a2,b2,a3,b3,a4,b4];(4)IFS算法画Sierpinski三角形程序sierpinski_ifs.h function sierpinski_ifs(n,w1,w2,w3)%sierpinski_ifs(10000,1/3,1/3,1/3)%w1,w2,w3出现频率n=10000;w1=1/3;w2=1/3;w3=1/3;M1=[0.5 0 0 0 0.5 0];M2=[0.5 0 0.5 0 0.5 0];M3=[0.5 0 0.25 0 0.5 0.5];x=0;y=0;% r为[0,1]区间内产生的n维随机数组r=rand(1,n);B=zeros(2,n);k=1;% 当0<r(i)<1/3时,进行M1对应的压缩映射;% 当1/3=<r(i)<2/3时,进行M2对应的压缩映射;% 当2/3=<r(i)<1时,进行M3对应的压缩映射;for i=1:nif r(i)<w1a=M1(1);b=M1(2);e=M1(3);c=M1(4);d=M1(5);f=M1(6);else if r(i)<w1+w2a=M2(1);b=M2(2);e=M2(3);c=M2(4);d=M2(5);f=M2(6);else if r(i)<w1+w2+w3a=M3(1);b=M3(2);e=M3(3);c=M3(4);d=M3(5);f=M3(6);endendendx=a*x+b*y+e;y=c*x+d*y+f;B(1,k)=x;B(2,k)=y;k=k+1;endplot(B(1,:),B(2,:),'.','markersize',0.1)(5)IFS算法画Julia集程序julia_ifs.h function julia_ifs(n,cx,cy)% julia_ifs(100000,-0.77,0.08)% f(z)=z^2+c,cx=real(c);cy=image(c);n=10000;cx=-0.77;cy=0.08;% z^2+c=z0,x=real(z0);y=image(z0);x=1;y=1;B=zeros(2,n);k=1;% A为产生的服从标准正态分布的n维随机数组A=randn(1,n);for i=1:nwx=x-cx;wy=y-cy;if wx>0alpha=atan(wy/wx);endif wx<0alpha=pi+atan(wy/wx);endif wx==0alpha=pi/2;endalpha=alpha/2;r=sqrt(wx^2+wy^2);if A(i)<0r=-sqrt(r);elser=sqrt(r);endx=r*cos(alpha);y=r*sin(alpha);B(1,k)=x;B(2,k)=y;k=k+1;endplot(B(1,:),B(2,:),'.','markersize',0.1)(6) 逃逸时间算法画Sierpinski垫片程序sierpinski.h function sierpinski(a,b,c,d,n,m,r)%sierpinski(0,0,1,1,12,200,200)%(a,b),(c,d)收敛区域左上角和右下角坐标,m为分辨率% n为逃逸时间,需要反复试探,r逃逸半径a=0;b=0;c=1;d=1;n=12;m=200;r=200;B=zeros(2,m*m);w=1;for i=1:mx0=a+(c-a)*(i-1)/m;for j=1:my0=b+(d-b)*(j-1)/m;x=x0;y=y0;for k=1:nif y>0.5x=2*x;y=2*y-1;else if x>=0.5x=2*x-1;y=2*y;elsex=2*x;y=2*y;endif x^2+y^2>rbreak;endendif k==nB(1,w)=i;B(2,w)=j;w=w+1;endendendplot(B(1,:),B(2,:),'.','markersize',0.1)(7) 元胞自动机算法画Sierpinski三角形程序一维元胞自动机sierpinski_ca1.hfunction sierpinski_ca1(m,n)%sierpinski_ca1(1000,3000)m=1000;n=3000;x=1;y=1;t=1;w=zeros(2,m*n);s=zeros(m,n);s(1,fix(n/3))=1;for i=1:m-1for j=2:n-1if (s(i,j-1)==1&s(i,j)==0&s(i,j+1)==0)|(s(i,j-1)==0&s(i,j)==0&s(i,j+1)==1)s(i+1,j)=1;w(1,t)=x+3+3*j;w(2,t)=y+5*i;t=t+1;endendendplot(w(1,:),w(2,:),'.','markersize',1)² 二维元胞自动机sierpinski_ca2.h function sierpinski_ca2(m,n)%sierpinski_ca2(400,400)m=400;n=400;t=1;w=zeros(2,m*n);s=zeros(m,n);s(m/2,n/2)=1;for i=[m/2:-1:2,m/2:m-1]for j=[n/2:-1:2,n/2:n-1]ifmod(s(i-1,j-1)+s(i,j-1)+s(i+1,j-1)+s(i-1,j)+s(i+1,j)+s(i-1,j+1)+s(i,j+1)+s(i+1,j+1),2)== 1s(i,j)=1;w(1,t)=i;w(2,t)=j;t=t+1;endendendplot(w(1,:),w(2,:),'.','markersize',0.1)(8) IFS算法画Helix曲线程序helix_ifs.hfunction helix_ifs(n,w1,w2,w3)%helix_ifs(20000,0.9,0.05,0.05)%w1,w2,w3为出现频率n=20000;w1=0.9;w2=0.05;w3=0.05;M1=[0.787879 -0.424242 1.758647 0.242424 0.859848 1.408065]; M2=[-0.121212 0.257576 -6.721654 0.05303 0.05303 1.377236]; M3=[0.181818 -0.136364 6.086107 0.090909 0.181818 1.568035]; x=0;y=0;% r为[0,1]区间内产生的n维随机数组r=rand(1,n);B=zeros(2,n);k=1;% 当0<r(i)<1/3时,进行M1对应的压缩映射;% 当1/3=<r(i)<2/3时,进行M2对应的压缩映射;% 当2/3=<r(i)<1时,进行M3对应的压缩映射;for i=1:nif r(i)<w1a=M1(1);b=M1(2);e=M1(3);c=M1(4);d=M1(5);f=M1(6);else if r(i)<w1+w2a=M2(1);b=M2(2);e=M2(3);c=M2(4);d=M2(5);f=M2(6);else if r(i)<w1+w2+w3a=M3(1);b=M3(2);e=M3(3);c=M3(4);d=M3(5);f=M3(6);endendendx=a*x+b*y+e;y=c*x+d*y+f;B(1,k)=x;B(2,k)=y;k=k+1;endplot(B(1,:),B(2,:),'.','markersize',0.1)/link?url=CEfKyhT7lmb10gOVen5eSHpjztx2JuN1vJf02qoyK9oXrqfTYE TbwxhPSE7QdgQrzqObbSGfbQixLyP3U09MokUvaST2CcsGP4uFqYi6YF_小宇宙被誉为大自然的几何学的分形(Fractal)理论,是现代数学的一个新分支,但其本质却是一种新的世界观和方法论。