分形图形学实验指导

合集下载

图形学实验一 三维分形(附源代码)

图形学实验一 三维分形(附源代码)

实验报告实验名称:三维分形算法姓名:陈怡东学号: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)细分四面体的函数实现。

计算机图形学实验报告(分形图)

计算机图形学实验报告(分形图)

实验六:分形图的生成班级11信计2班学号20110502078 姓名刘昱丞分数一、实验目的理解分形图生成的基本原理,掌握几种常见的分形图生成算法,利用TurboC实现Koch 曲线和可以无穷放大的Mandelbrot Set (曼德布洛特集)生成算法。

二、实验内容1.、利用Koch 曲线生成规则,在屏幕上生成一段Koch 曲线。

2/、利用Mandelbrot Set 生成规则,在屏幕上生成可以无穷放大的Mandelbrot Set (曼德布洛特集)三、实验步骤(1)预习教材关于Koch 曲线和可以无穷放大的Mandelbrot Set (曼德布洛特集)的生成原理。

(2)仿照教材关于Koch 曲线和可以无穷放大的Mandelbrot Set (曼德布洛特集)生成算法生成算法,使用TurboC实现该算法。

(3)调试、编译、运行程序。

四、实验要求在下次实验时提交本次试验的实验报告(实验报告包括实验目的、实验内容、实验实现过程、源程序、实验结果、实验体会)。

五、实验过程( 1 ) Koch 曲线的生成规则它的构造是:迭代初始把原线段去掉中间的三分之一,代之以底边在被去线段上的等边三角形的两腰;以后每一步的迭代都是这样的重复。

从以上过程可以清楚地看出,Koch曲线(其它分形集也是如此)可以由简单的图,称为生成元,迭代产生。

在这里,Koch曲线的生成元是:六、实验代码1/、Koch曲线源程序:#include <stdio.h>#include <stdlib.h>#include <math.h>#include <conio.h>#include <graphics.h>#define rad 0.0174532925#define NUMBER 24koch(ax,ay,bx,by)int ax,ay,bx,by;{ float cx,cy,ex,ey,dx,dy,arf,le,c;c=1000; /*30000,20000,10000,5000,1000 tiao jie ci shu */if ((bx-ax)*(bx-ax)+(by-ay)*(by-ay)<c)line(ax,ay,bx,by);else{cx=ax+(bx-ax)/3;cy=ay+(by-ay)/3;ex=bx-(bx-ax)/3;ey=by-(by-ay)/3;koch((int)(ax),(int)(ay),(int)(cx),(int)(cy)); /* koch(ax,ay,cx,cy); */ koch((int)(ex),(int)(ey),(int)(bx),(int)(by));le=sqrt((ex-cx)*(ex-cx)+(ey-cy)*(ey-cy)); /* koch(ex,ey,bx,by); */ arf=atan((ey-cy)/(ex-cx));if((arf>=0 &&(ex-cx)<0)||(arf<=0 &&(ex-cx)<0))arf=arf+3.1415;dy=cy+sin(arf+3.1415/3)*le;dx=cx+cos(arf+3.1415/3)*le;koch((int)(cx),(int)(cy),(int)(dx),(int)(dy)); /*koch(cx,cy,dx,dy);*/ koch((int)(dx),(int)(dy),(int)(ex),(int)(ey)); /* koch(dx,dy,ex,ey); */ }}main(){float xa1,xb1,ya1,yb1;float xa,xb,ya,yb;float dex,dey,dx,dy;float x,y,s1,s2;int steps,k;int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"C:\\JMSOFT\\DRV");cleardevice();setbkcolor(BLUE);/* line(400,400,600.4,540.6); */settextstyle(1,0,3);outtextxy(100,100,"Shijiazhuang University");/* koch(340,150,100,150) ; */koch(100,300,500,300) ;getch();closegraph();return 0;}输出结果为:2.、可以无穷放大的Mandelbrot Set (曼德布洛特集)源程序:#include <graphics.h>#include <conio.h>// 定义常量#define ITERATIONS 1000 // 迭代次数,越高,图像越精细#define MAXCOLOR 64 // 颜色数/////////////////////////////////////////////////// 定义复数及乘、加运算/////////////////////////////////////////////////// 定义复数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;}/////////////////////////////////////////////////// 定义颜色及初始化颜色/////////////////////////////////////////////////// 定义颜色int Color[MAXCOLOR];// 初始化颜色void InitColor(){// 使用HSL 颜色模式产生角度h1 到h2 的渐变色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);}}/////////////////////////////////////////////////// 绘制Mandelbrot Set (曼德布洛特集)/////////////////////////////////////////////////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 < ITERA TIONS; k++){if ( z.re * z.re + z.im * z.im > 4.0 ) break;z = z * z + c;}putpixel(x, y, (k >= ITERA TIONS) ? 0 : Color[k % MAXCOLOR]);}}}/////////////////////////////////////////////////// 主函数/////////////////////////////////////////////////void main(){// 初始化绘图窗口及颜色initgraph(640, 480);InitColor();// 初始化Mandelbrot Set(曼德布洛特集)坐标系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);// 按鼠标左键并拖动,选择区域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;// 修正选区为4:3int 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);}}getch();closegraph(); }输出结果为:。

数学中的分形几何学研究

数学中的分形几何学研究

数学中的分形几何学研究数学是一门广泛而深奥的学科,其中一个引人注目的领域是分形几何学。

分形几何学研究的是那些具有自相似性质的几何对象。

这些对象通常具有复杂的形态,不同于我们熟悉的欧几里得几何中的简单形状。

本文将介绍分形几何学的基本概念、发展历程以及其在科学和艺术领域中的应用。

一、分形几何学的基本概念在数学中,分形是指具有自相似性质的几何对象。

简单来说,自相似性是指一个对象的局部部分与整体具有相似的结构。

这种自我重复的特点使得分形对象在不同的尺度上都呈现出相似的形状,无论是放大还是缩小都能看到相似的结构。

分形几何学的概念由波兰数学家Mandelbrot于20世纪70年代提出。

他提出了分形维度的概念,用来描述分形对象的复杂程度。

与传统的欧几里得几何中的整数维度不同,分形维度可以是小数或甚至是复数。

这种非整数维度反映了分形对象的复杂性和内在的奇特性。

二、分形几何学的发展历程分形几何学的发展历程可以追溯到20世纪初。

法国数学家Julia和Fatou在复变函数论中研究了分形形态的变化规律。

在20世纪60年代,英国数学家Mandelbrot通过计算机模拟实验研究了分形对象的特性,并提出了“分形”这一概念。

在之后的几十年里,分形几何学得到了广泛的关注和研究。

人们发现分形几何学的理论可以应用于自然科学、社会科学、经济学以及艺术领域中。

世界各地的研究者都对分形几何学的应用进行了深入的探索和研究。

三、分形几何学在科学领域的应用分形几何学在科学领域中有着广泛的应用,特别是在自然科学中。

例如,分形结构在物理学中的应用包括描述分形雪花的形态、研究分形线圈的导电性以及模拟分形粗糙表面的特性。

在地质学中,分形几何学被用于研究岩石的纹理和断层的分布规律。

生物学中,分形理论被应用于研究动脉树和神经网络的分形结构。

分形几何学也在计算机科学领域中得到了广泛的应用。

例如,分形算法可以用于图像压缩和图像合成,同时也在计算机图形学中被用于生成逼真的自然景观和人物造型。

分形的特点及构造方法

分形的特点及构造方法

分形的特点及构造方法分形是数学中的一个重要概念,它具有独特的特点和构造方法。

作为一位初中数学特级教师,我将在本文中向大家介绍分形的特点以及构造方法,希望能够帮助中学生及其父母更好地理解和应用分形。

一、分形的特点分形最显著的特点就是自相似性。

自相似性是指一个物体的各个部分都与整体具有相似的形状或结构。

换句话说,无论是放大还是缩小,这个物体的形状都会重复出现。

例如,我们可以观察一片树叶,发现树叶的小分支和整个树叶的形状非常相似,这就是分形的自相似性。

另一个特点是分形的复杂性。

分形形状通常是非常复杂的,往往无法用简单的几何图形来描述。

例如,分形图形中的曲线可以不连续,具有很多细节和尖锐的边缘。

这种复杂性使得分形在自然界和科学研究中具有广泛的应用价值。

二、分形的构造方法1. 基于迭代的构造方法迭代是分形构造的基本方法之一。

通过不断重复相同的操作,可以构造出具有自相似性的分形图形。

例如,康托尔集合就是通过迭代的方式构造出来的。

首先,将一条线段分成三等分,然后去掉中间那一段,再对剩下的两段线段进行相同的操作。

重复这个过程无限次,最后得到的就是康托尔集合,它具有自相似性和复杂的形状。

2. 基于分形几何的构造方法分形几何是研究分形的数学工具,通过一些几何变换和规则,可以构造出各种各样的分形图形。

例如,科赫曲线就是通过分形几何构造出来的。

首先,将一条线段分成三等分,然后将中间那一段替换为一个等边三角形的两条边,再对剩下的两段线段进行相同的操作。

重复这个过程无限次,最后得到的就是科赫曲线,它具有分形的特点。

三、分形的应用分形不仅仅是数学中的一个概念,它还具有广泛的应用价值。

在自然界中,很多自然现象都具有分形的特点,例如云朵的形状、山脉的轮廓、河流的分布等。

通过研究这些分形现象,我们可以更好地理解自然界的规律。

在科学研究中,分形也被广泛应用于物理学、生物学、经济学等领域。

例如,在物理学中,分形可以用来描述复杂的物理现象,如分形电阻、分形结构的磁体等。

分形图形学

分形图形学

其实对分形的理解并没有那么神奇。可以说,虽然曼德布劳特硬是制造了分形(fractal)这个名词,是个新鲜的事情,但是,分形所反映的内容本身,其苗头确实古已有之。如前所叙述的那样,分形的重要来源,是数学上的思考,属于科学研究的产物,常常是某种离散动力系统参数分布的图示。因为表现这种参数分布须借助计算机的计算和处理;而作为处理的结果,这类图示观看起来是那么的漂亮、琢磨下去又是那么的含蓄,于是它的影响远远超出了数学的领域。分形不仅引起科学家们的注意,而且在艺术界造成了轰动。社会学家从人文的角度,分析与演绎分形的哲理;艺术大师们,以审美的观点,推崇与渲染分形的艺术特征…。
参考文献:分形理论在计算机图形学中的应用
人们谈论分形,常常有两种含义。其一,它的实际背景是什么?其二,它的确切定义是什么?数学家研究分形,是力图以数学方法,模拟自然界存在的、及科学研究中出现的那些看似无规律的各种现象。在过去的几十年里,分形在物理学、材料科学、地质勘探、乃至股价的预测等方面都得到了广泛的应用或密切的注意,并且由于分形的引入,使得一些学科焕发了新的活力。数学上所说的分形,是抽象的。而人们认为是分形的那些自然界的具体对象,并不是数学家所说的分形,而是不同层次近似。
几乎在曼德布劳特获得Barnard奖章的同时,以德国布来梅大学的数学家和计算机专家H.Peotgen与P.Richter等为代表,在当时最先进的计算机图形工作站上制作了大量的分形图案;J. Hubbard等人还完成了一部名为《混沌》的计算机动画。接着,印刷着分形的画册、挂历、明信片、甚至T恤衫纷纷出笼。80年代中期开始,首先在西方发达国家,接着在中国,分形逐渐成为脍炙人口的词汇,甚至连十几岁的儿童也迷上了计算机上的分形游戏。我国北京的北方工业大学计算机图形学小组于1992年完成了一部计算机动画电影《相似》,这部电影集中介绍了分形图形的相似性,这也是我国采用计算机数字技术完成的第一部电影,获得当年电影电视部颁发的科技进步奖。

分形(fractal)方法

分形(fractal)方法

分形(fractal)方法分形(fractal)方法是一种数学和计算机科学中常用的分析和模拟方法。

它通过重复应用一些简单的规则,构建出复杂的结构。

分形方法的优点在于可以表达自然界中的许多复杂现象,并且能够以较简洁的方式进行描述和计算。

分形方法最早由法国数学家勒让德在20世纪初提出。

勒让德研究了一种称为科赫曲线的分形图形,它通过将线段分成三等分,并在中间的一段上构造一个等边三角形,然后重复这个过程。

通过不断重复这个过程,可以得到越来越接近科赫曲线的图形。

这个过程可以无限地进行下去,因为每次分割都会产生越来越多的线段。

科赫曲线是分形方法的一个经典例子,它展示了分形的重复性和自相似性。

自相似性是指分形图形的一部分和整体之间存在相似的结构。

科赫曲线的每一段都和整条曲线具有相似的形状,这种特性使得分形图形具有无限的细节和复杂性。

除了科赫曲线,分形方法还可以用来构造其他各种形状和图案。

例如,分形树是通过将一条线段分成若干部分,并在每个部分上再生长出一条线段,通过不断重复这个过程,可以得到树状的分形图形。

分形树可以模拟自然界中树木的分枝结构。

分形方法还可以应用于图像压缩和信号处理等领域。

通过分析图像或信号的分形特性,可以将其压缩为较小的文件大小,并且能够保留原始数据的重要信息。

这种方法在计算机图像处理和通信领域有着广泛的应用。

分形方法的研究不仅仅局限于数学和计算机科学领域,它还对其他学科的研究产生了很大的影响。

例如,在物理学中,分形方法可以用来研究复杂结构的形成和演化规律。

在生物学中,分形方法可以用来模拟生物体的形态和生长过程。

在经济学中,分形方法可以用来分析金融市场的波动性和不确定性。

分形方法是一种强大而灵活的分析和模拟工具。

它通过简单的规则和重复的过程,可以构建出复杂的结构,并且能够准确地描述和计算自然界中的复杂现象。

分形方法的应用范围广泛,不仅仅局限于数学和计算机科学领域,还对其他学科的研究产生了深远的影响。

分形手指实验目标及方法

分形手指实验目标及方法

分形手指实验目标及方法标题:探索分形手指实验的目标和方法摘要:本文旨在介绍分形手指实验的目标、方法和实施步骤。

我们将深入探讨分形几何学的基本原理以及如何运用这些原理来设计和实施实验。

通过这篇文章,您将对分形手指实验有一个全面、深入和灵活的理解,并能从中获得有价值的知识。

导言:分形几何学作为一门重要的数学分支,研究的是自相似性和递归的几何结构。

近年来,分形手指实验成为学校和实验室中常见的实践活动,有助于引发学生对分形几何学的兴趣,并增进他们对数学的理解。

通过本文,我们将深入探讨分形手指实验的目标和方法,帮助读者在实施实验时更好地理解和运用分形几何学的概念。

一、分形手指实验的目标1.1 增进对分形几何学的理解1.2 培养创造性思维和问题解决能力1.3 激发兴趣和好奇心二、分形手指实验的方法2.1 准备实验所需材料2.2 实验步骤及操作指南2.2.1 第一步:准备水、漂白剂和盐巴2.2.2 第二步:将手指浸泡在水中2.2.3 第三步:涂抹漂白剂2.2.4 第四步:洗净手指2.2.5 第五步:用盐巴覆盖手指2.2.6 第六步:观察和记录结果三、实验结果和讨论3.1 分形手指的外观特征3.2 分形手指与分形几何学的关联3.3 实验可能存在的变数和局限性四、实验结论及进一步探究建议观点和理解:分形手指实验旨在通过操作手指的几何结构来帮助学生理解分形几何学的原理。

通过观察手指的自相似性和递归性,学生能够直观地感受和理解分形几何学的基本概念。

此外,实验还培养了学生的创造性思维和问题解决能力,激发了他们对数学和科学的兴趣。

然而,实验中可能存在一些变数和局限性,例如实验结果的可重复性和不同环境对实验结果的影响。

为了进一步探究分形几何学的应用和相关领域,建议学生可以结合其他实验和理论知识展开更深入的研究。

结论:本文详细介绍了分形手指实验的目标、方法和实施步骤,并探讨了实验结果和其与分形几何学的关联。

通过分形手指实验,学生可以全面、深入和灵活地理解分形几何学的概念。

学习分形形了解分形形的特点和构造方法

学习分形形了解分形形的特点和构造方法

学习分形形了解分形形的特点和构造方法学习分形:了解分形的特点和构造方法分形(fractal)一词由波兰数学家曼德尔布罗特(Benoit Mandelbrot)于1975年引入,用于描述一类自相似的几何图形或物体。

分形具有许多独特的特点,如无穷细节、复杂性、自相似性等。

本文将介绍分形的特点和构造方法。

一、分形的特点1. 无穷细节:分形具有无穷多的细节和复杂性,无论放大或缩小图像,都能够发现新的细节。

这使得分形在数学、自然科学和艺术等领域具有广泛应用。

2. 自相似性:分形是自相似的,即整体的结构与其局部结构相似。

无论是整体还是局部的形状都能够在较小或较大的尺度上找到相似的结构。

这种自相似性是分形的重要特征。

3. 复杂性:分形的复杂性指的是其结构和形态的复杂程度。

相比于传统的几何图形,分形形状更为复杂,无法用简单的几何形状或方程式描述。

4. 维度非整:分形的维度通常是非整数维的,例如,柯赛雪垫(Koch曲线)的维度介于1和2之间。

这种非整数维度是分形与传统几何学的重要区别之一。

5. 噪声与规则性:分形能够通过噪声与规则性的结合来表现出不规则的形态。

分形结构的噪声性质使得其在模拟自然界中的山脉、云朵等不规则物体时非常逼真。

二、分形的构造方法1. 迭代函数系统(IFS):迭代函数系统是构造分形图形的一种常用方法。

它通过对函数的重复应用来生成自相似结构。

柯赛雪垫和谢尔宾斯基地毯(Sierpinski carpet)都是通过迭代函数系统构造的。

2. 分形树:分形树是用于模拟植物的分枝结构的一种方法。

通过对树干进行重复分支并在每个分支的末端再次生成分支,可以构造出栩栩如生的分形树形结构。

3. 噪声函数:噪声函数是基于随机数生成的分形图形构造方法之一。

通过使用不同频率和振幅的噪声函数叠加,可以产生具有细节丰富的分形图像。

4. 分形几何的数学公式:柯赛雪垫、曼德尔布罗特集合等分形图形可以使用数学公式进行描述和生成。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

分形图形学实验指导————————————————————————————————作者: ————————————————————————————————日期:ﻩ分形图形学实验指导实验一二维空间上的分形图形生成实验目的1.Mandelbrot集与Julia集的计算机实现2.掌握用L系统语言生成分形实验内容及步骤1.编写程序生成Mandelbrot集在复迭代中影响最大的当属迭代z→z^2+c,实际上它只是形式更一般的复解析迭代z_(n+1)=F(z_n)+c的一种, F是一个非线性函数。

显然z→z^2+c也是最简单的一种,它在复迭代中的地位相当于逻辑斯蒂映射x_(n+1)=ax_n(1- x_n)在实迭代中的地位(见第八章)。

考虑一般形式的F,令z=x+iy,c=c_( X)+ic_(Y),其中i表示虚数,i=SQRT(-1)。

分离实部与虚部,具体化迭代关系便有:x→f(x,y)+c_(X),y→g(x,y)+c_(Y).通常所说的M集是迭代二次函数z→z^2+c产生的,此函数具体化就是x→x^2-y^2+c_(X),y→2xy+c_(Y).其中z=x+i y,c=c_(X)+i c_(Y ),以横轴x记录实数的实部,以纵轴y记录实数的虚部。

M集合实际上是常数c=(c_(X),c_(Y))构成的图象。

让c从屏幕左上角开始变化,逐行增加,一直变到屏幕右下角。

如果取的区域是200×200,则一共要计算40,000个点,把计算的结果用不同的颜色标记下来,就得到一幅图象,这就是M 集。

对于不同的c值,如何得到表征迭代性质的不同的结果呢?容易知道,无穷远处肯定是迭代的一个吸引子,即对于复平面上相当多的初始条件,迭代最终都跑到无穷远处。

但研究发现,在原点附近还存在一个奇特的区域,在迭代过程中此区域永远不会跑掉。

在非严格的意义上,这个不变的集合就是M集,我们的主要任务就是画出这个集合的边界——实际上边界是分形曲线,极其复杂,M集图象的全部魅力就在这里。

在复平面上,我们以原点(0,0)作为参考点,观察迭代过程是否远离原点,以及逃离原点的速度如何。

为此规定一个距离函数D=x^2+y^2,其实D有许多不同的取法,以上取法是最普通的。

可以看出,如果D较大,表明迭代点离原点较远,如果D较小,表明迭代点离原点较近。

假设对于任何一个c,迭代都从(x_0,y_0)=(0,0)开始,我们观察迭代点列(x_1,y_1),(x_2,y_2),(x_3,y_3),… ,(x_(100),y_(100)),…的变化状况。

每一次都计算一下D值,即该点与原点(0,0)的距离(为方便计,这里实际上计算的是距离的平方)。

取一个参考距离R,不妨取得大一些,比如R =40(实际上取20就足够了)。

现在想知道迭代多少次后实际的距离D大于R 。

在迭代过程中如果D小于R,则继续让计算机迭代,要规定一个上限,比如300次。

如果迭代了300次后结果仍然不跑掉(即D仍然小于R),则可以近似认为此点属于M集合。

对于迭代次数小于300次的情况,如果迭代10次D就大于R,则标记c点为白色;如果迭代35次D开始大于R,则标记c点为红色;如果迭代110次D开始大于R,则标记c点为蓝色,等等。

2.编写程序生成Julia集一个M集可以对应无数种J集,实际上M集就是所有J集的浓缩。

M集不同部位的形状,反映了对应于该处的J集的形状,于是用M集可以对J集进行分类,至少在计算机图形学的层次上可以这样说。

计算J集时,初始迭代点就不能总取(0,0)了,而是要根据实际位置取实际的 (x,y)坐标值。

仍以迭代z→z^2+c为例说明。

先取定一个c值,比如c=(1.0221,0.2433),迭代关系化为x→x^2-y^2+1.0221,y→2xy+0.2433.从屏幕左上角算起,逐行计算,一直算到屏幕右下角。

当然,也可以不取整个屏幕那么大,只选一个200×200的小区域做。

标色的原理与上面讲M集合时完全类似,此略。

改变常数c的取值,可以得到各式各样的J集。

3.比较M集与J集的区别与联系在源程序中,M集与J集的计算方法十分相似,只需改变两处语句就可以互换为对方。

初始迭代点迭代关系说明M集x0:=0;y0:=0;x1:=f(x,y)+p0;y1:=g(x,y)+q0;p_0,q_0不断变化J集x0:=p0;y0:=q0;x1:=f(x,y)+c_X;y1:=g(x,y)+c_Y;< /TD>c_(X),c_(Y)固定不变4.编写程序用L系统语言生成分形图形1)编写程序生成柯赫曲线:初始图形是一条线段,生成过程是将线段中间1/3向外折起。

程序伪码如下:KochCurve{ ;柯赫曲线Angle 6 ;角度增量是60°Axiom F;初始图形是一单位线段F=F+F--F+F ;产生式是将线段中间1/3折起} ;结束2)用L系统再次生成希尔伯特曲线。

生成希尔伯特曲线的伪码如下:Hilbert{ ;希尔伯特曲线,1996-12Angle 4Axiom Y ;初始串为任意字母YX=-YF+XFX+FY-;第一个生成规则Y=+XF-YFY-FX+ ;第二个生成规则,由以上规则不断代换}3)模拟草本植物。

注意这里出现了“括号”——可以方便地表示树枝,伪码如下:HerbPlant { ;生成植物,本程序使用了括号Angle 14AxiomZZ=ZFX[+Z][-Z]X=X[-FFF][+FFF]FX}ﻬ实验二高维空间的分形图形生成实验目的1.了解三维L-系统生成高维空间分形图形的方法2.掌握四元数生成Mandelbrot集和Julia集3.掌握随机中点位移法实验内容及步骤1.编写程序,使用四元数生成Mandelbrot集和Julia集通常我们是在二维复平面上研究广义的M集和J集,也可以通过“四元数” (quaternions)将它们推广到高维空间中去。

在二维复平面中表示复数只用两个基向量:1和 i。

在四维空间中讨论超复数,现在有四个基向量:1,i, j和k。

任一复数可以表示为q=x+yi+zj+qk.超复数基向量之间的运算关系(注意,不同于传统上四元数基向量之间的运算关系)为:ij=k,jk=-i,ﻫki=-j,ji=k,kj=-i,ik=-j,ﻫii=jj=-kk=-1,ijk=1.注意,运算关系的规定多少有些任意性,也可以规定i^2=j^2=k^2=+ 1。

在四维空间H中也可以研究迭代x→x^2+c下的超朱丽亚集J,选一个截面,将超朱丽亚集投影到三维空间中,可以得到立体的J集图象。

实验三分形混沌动力系统实验目的1.了解动力系统概念2.掌握Julia复动力系统及其IFS诠释3.了解混沌的概念;实验内容及步骤1.使用IFS方法,编写生成Julia复动力系统的程序通过IFS方法还可以绘制朱丽亚集J。

设z→z^2+c,求出两个逆变换:w_1(z)=SQRT(z-c),w_2(z)=-SQRT(z-c),取概率(p_1,p_2)=(1/2,1/2),迭代后生成的吸引子实际上就是各种朱丽亚集!IFS方法、L系统、混沌动力学以及有关 M集和J集的迭代,事实上都是相互关联着的,这种关联体现了非线性科学的内在逻辑。

算法:Julia_IFS标题:Julia集的IFS算法参数:z(迭代次数)PI(π值)RAND_MAX(随机最大值)变量:k(概率变量)x,y(z的实部和虚部)cx,cy(c的实部和虚部)r(极距)a,b,e,f,m,n,wx,wy,theta函数:Pset(x,y) (画点函数)Rand(随机函数)sin(正弦函数)cos(余弦函数)atan(反正切函数)BEGINFOR i=1 TO zm=a*x+en=b*y+fIF i>10 THENPset(m,n)ENDIFwx=x-cxwy=y-cyIFwx>0 THENtheta=atan(wy/wx)ENDIFIF wx<0 THENtheta=PI+atan(wy/wx)ENDIFIF wx=0THENtheta=PI/2ENDIFtheta=theta/2r=sqit(wx*wx+wy*wy) k=randrnd=k/RAND_MAX IF rnd<0.5 THENr=sqrt(r)ELSEr=-sqrt(r)ENDIFx=r*cos(theta)y=r*sin(theta) ENDFOREND实验四分形图像压缩实验目的1.掌握冗余度压缩(熵编码)2.限失真编码(熵压缩)3.掌握分形图像压缩的原理与方法4.编程实现分形图像压缩。

实验内容及步骤1.使用IFS方法,编程实现简单自相似图像谢尔宾斯基基垫压缩分形图像压缩是利用原始图像所具有的自相似性,构造一个迭代函数系统(IFS),利用IFS抽取图像的自相似性,即用图像中的一个子块经过分形仿射变换来逼近同一图像中的另一子块,而且仅仅将仿射变换系数记录下来,从而达到压缩图像数据的目的。

以谢尔宾斯基基垫为例加以说明,如下图。

可以看出,整个垫子是由上、左下、右下3个较小的垫子组成。

每个较小的垫子是由原来的垫子经收缩仿射变换得来的。

如果能分别找出把原图形变成3个小图形的收缩放射变换,那么,整个迭代函数系统就定下来了。

设原来垫子3各顶点的坐标分别为(x1,y1),(x2,y2),(x3,y3)。

变换所得小垫子的3个顶点坐标为(x'1,y'1),(x'2,y'2),(x'3,y'3)。

图2.3(b)表示的是把原电子变为上面小垫子的坐标。

把W1的变换式展开:ﻫx'1=a1x1+b1y1+e1ﻫy'1=c1x1+d1y1+f1x'2=a1x2+b1y2+e1ﻫ y'2=c1x2+d1y2+f1ﻫx'3=a1x3+b1y3+e1ﻫ y'3=c1x3+d1y3+f1解这组方程得到变换W1的各系数。

代入以上方程组,得到。

同理,利用左下方垫子和右下方垫子可求出变换W2和W3的系数。

分别为:a2=d2=0.5,b2=c2=e2=f2=0,a3=d3=0.5,b3=c3=f3=0,e3=1.ﻬ实验五分形图像压缩程序设计实验目的1.理解局部迭代函数系统2.了解四叉树方法3.了解自适应合并法4.了解与向量量化的混合优化方法实验内容及步骤1.设计编写一个分形图像压缩程序实现基本图像压缩,并分析所采用算法实现的优缺点。

相关文档
最新文档