电子科技大学数学实验实验报告(含详细程序和实验数据)-Koch分形雪花,计算瑞典国土,计算我国海岸线长度

合集下载

光学分形实验报告

光学分形实验报告

#### 一、实验目的1. 理解分形几何的基本概念和特性。

2. 掌握利用计算机实现分形图形的生成方法。

3. 通过实验,深入理解分形在光学领域中的应用。

#### 二、实验原理分形几何是研究不规则、自相似几何形状的数学分支。

在光学领域,分形几何可以用于模拟自然界的复杂现象,如海岸线、云彩、雷电等。

分形图形通常具有自相似性,即局部与整体在结构上具有相似性。

本实验主要采用迭代和递归的方法生成几种典型的分形图形,包括Koch曲线、Sierpinski三角形和Cantor集。

#### 三、实验仪器1. 计算机2. 编程软件(如Python、MATLAB等)3. 打印机(用于打印实验结果)#### 四、实验内容1. Koch曲线Koch曲线是一种由直线段组成的分形曲线,其生成方法如下:(1)绘制一条直线段L0。

(2)将L0等分为三段,删除中间一段,并在两端各向外绘制一个等边三角形,形成L1。

(3)对L1的每一条线段重复步骤(2),得到L2。

(4)重复步骤(3),直至达到所需的迭代次数。

2. Sierpinski三角形Sierpinski三角形是一种由等边三角形组成的分形图形,其生成方法如下:(1)绘制一个等边三角形T0。

(2)将T0的每个顶点与对边的中点连接,得到三个新的等边三角形,分别标记为T1。

(3)对T1的每个顶点与对边的中点连接,重复步骤(2),得到T2。

(4)重复步骤(3),直至达到所需的迭代次数。

3. Cantor集Cantor集是一种由线段组成的分形图形,其生成方法如下:(1)绘制一条线段L0。

(2)将L0等分为三段,删除中间一段,得到L1。

(3)对L1的每一条线段重复步骤(2),得到L2。

(4)重复步骤(3),直至达到所需的迭代次数。

#### 五、实验步骤1. 使用编程软件实现Koch曲线、Sierpinski三角形和Cantor集的生成算法。

2. 设置迭代次数,观察分形图形的生成过程。

3. 将生成的分形图形打印出来,分析其特性。

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

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

实验六:分形图的生成班级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(); }输出结果为:。

分形曲线与面积计算-精品

分形曲线与面积计算-精品

sinx1 cos x2
cos sin
Asin
cos

(1, 0)
1

0


cos sin


(0, 1)

0 sin

1

cos

5/11
MATLAB代码
function koch0(P,N)
end
plot(P(:,1),P(:,2)),axis off axis image
6/11
Kn的边数: Kn的周长:
Sn 4n
Ln

1 3n
4n
L0
Kn的维数: Dnln4/ln31.2618
Dn

lnN
/
ln
1

相邻两次的边数比和边长比
参考资料: 分形论——奇异 性探索,作者:林鸿溢
第 k 条边: x y((tt)) ((1 1 tt))x yk k ttyx kk 11,t(0,1)
1
L kyd 0 x [1 ( t)yk tk y 1](x k 1x k)dt
1 2(xk1xk)(ykyk1)
x L k
9/11
面积计算的数学实验报告(三选一,或题材自选)
一、 Koch分形雪花 1.算法描述Koch分形雪花
2.证明Koch分形雪花图 Kn 的边数为
Ln 34n1
3.求Koch分形雪花图 Kn 的面积
ln im Are(aKn)
10/11
二、竞赛题的实验设 (第一届全国大学生数学夏令营第6题 )
课外作业:完成面积计算的 数学实验报告(电子文档)

分形实验报告

分形实验报告

实验1Koch曲线代码:#include<stdio.h>#include<graphics.h>#include<math.h>#include<conio.h>int NUM=6;double F=sqrt(3)/6.0;double Min(double a,double b){return (a<b)?a:b;}void koch(double x1,double y1,double x2,double y2,int num) {if(num==0){line((int)x1,(int)y1,(int)x2,(int)y2);return;}double x3,x4,x5,y3,y4,y5;x3=(x2-x1)/3.0+x1;x4=2*(x2-x1)/3.0+x1;y3=(y2-y1)/3.0+y1;y4=2*(y2-y1)/3.0+y1;if(y1<=y2){if(x1<x2)x5=(x1+x2)/2.0+F*fabs(y1-y2);elsex5=(x1+x2)/2.0-F*fabs(y1-y2);}else{if(x1>=x2)x5=(x1+x2)/2.0+F*fabs(y1-y2);elsex5=(x1+x2)/2.0-F*fabs(y1-y2);}y5=(y1+y2)/2.0-F*fabs(x1-x2);koch(x1,y1,x3,y3,num-1);koch(x3,y3,x5,y5,num-1);koch(x5,y5,x4,y4,num-1);koch(x4,y4,x2,y2,num-1); }void main(){int gd,gm;initgraph(&gd,&gm,"");setbkcolor(1);koch(500,300,10,300,NUM);getch();closegraph();}截图:Sierpinski曲线:代码:void main(){int gd,gm;initgraph(&gd,&gm,"");setbkcolor(1);koch(500,300,10,300,NUM);getch();closegraph();}#include<graphics.h>#include<conio.h>void Sier_Gasket(int n,int x1,int y1,int x2,int y2,int x3,int y3){int tri[8];if(n==0)return;tri[0]=(x1+x2)/2;tri[1]=(y1+y2)/2;tri[2]=(x2+x3)/2;tri[3]=(y2+y3)/2;tri[4]=(x1+x3)/2;tri[5]=(y1+y3)/2;tri[6]=tri[0];tri[7]=tri[1];moveto(tri[0],tri[1]);lineto(tri[2],tri[3]);lineto(tri[4],tri[5]);lineto(tri[6],tri[7]);floodfill((x1+x2+x3)/3,(y1+y2+y3)/3,RED);Sier_Gasket(n-1,x1,y1,(x1+x2)/2,(y1+y2)/2,(x1+x3)/2,(y1+y3)/2);Sier_Gasket(n-1,(x1+x2)/2,(y1+y2)/2,x2,y2,(x2+x3)/2,(y2+y3)/2);Sier_Gasket(n-1,(x1+x3)/2,(y1+y3)/2,(x2+x3)/2,(y2+y3)/2,x3,y3); }void main(){int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"");cleardevice();setfillstyle(1,2);setcolor(RED);moveto(10,420);lineto(10,420);lineto(320,20);lineto(640,420);lineto(10,420);setfillstyle(1,3);Sier_Gasket(1,10,420,320,20,640,420);getch();Sier_Gasket(2,10,420,320,20,640,420);getch();Sier_Gasket(6,10,420,320,20,640,420);getch();closegraph();}截图:康托三分集:代码:#include<stdio.h>#include<graphics.h>#include<math.h>#include<conio.h>void Cantor(int x1,int y1,int length,int num) {if(num==0){return;}line(x1,y1,x1+length,y1);Cantor(x1,y1+10,(int)length/3.0,num-1);Cantor(x1+(int)2*length/3.0+0.5,y1+10,(int)length/3.0,num-1); }void main(){int gd,gm;initgraph(&gd,&gm,"");setbkcolor(WHITE);setcolor(RED);Cantor(50,100,500,15);getch();closegraph();}实验2Koch(L系统实现)代码:#include<math.h>#include<conio.h>#include<graphics.h>#include<stdio.h>#define P 3.1415926535double ag=0;int xx=10;int yy=200;double d=0;//变换量char *s="F+F--F+F";//画树void Draw(int length,int num){if(num==0){xx=int(xx+length*cos(ag));yy=int(yy-length*sin(ag)+0.5);lineto(xx,yy);return ;}int i=0;char *p=s;while(*p!='\0'){char ch=*p;switch(ch){case 'F':Draw(length/3,num-1);break;case '+':ag=ag+P/3;break;case '-':ag=ag-P/3;break;}p++;}}void main(){int gd,gm,length=400;initgraph(&gd,&gm,"");moveto(xx,yy);Draw(length,4);getch();closegraph();}截图:Sierpinski三角形(L系统实现):代码:#include<math.h>#include<conio.h>#include<graphics.h>#include<stdio.h>#define P 3.1415926535double ag=0;int length=4;int xx=10;int yy=450;double d=0;char *left="+R-L-R+";char *right="-L+R+L-";void R(int num);void L(int num){if(num==0){xx=int(xx+length*cos(ag)+0.5);yy=int(yy-length*sin(ag)+0.5);lineto(xx,yy);return ;}char *p=left;while(*p!='\0'){char ch=*p;switch(ch){case 'L':L(num-1);break;case 'R':R(num-1);break;case '+':ag=ag+P/3;break;case '-':ag=ag-P/3;break;}p++;}}void R(int num){if(num==0){xx=int(xx+length*cos(ag)+0.5);yy=int(yy-length*sin(ag)+0.5);lineto(xx,yy);return ;}char *p=right;while(*p!='\0'){char ch=*p;switch(ch){case 'L':L(num-1);break;case 'R':R(num-1);break;case '+':ag=ag+P/3;break;case '-':ag=ag-P/3;break;}p++;}}void main(){int gd,gm;initgraph(&gd,&gm,"");moveto(xx,yy);setcolor(GREEN);L(7);getch();closegraph();}截图:分形树(L系统实现):代码:#include<math.h>#include<conio.h>#include<graphics.h>#include<stdio.h>int angel=21;//叠加角度double d=0.45;//变换量char *s="FF-[-F+F+F]+[+F-F-F]";//画树struct Stack{int x;int y;double a;}; //栈保存当前坐标和当前方向void Draw(int x,int y,int a,double length,int num)//x,y为当前坐标;a为当前角度;length为前进长度;num为递归控制{if(num==0)return ;char *p=s;int x1=x,y1=y,a1=a,i=0;Stack state[5];while(*p!='\0'){char ch=*p;switch(ch){case 'F':moveto(x1,y1);x1=int(x1+length*cos(a1*PI/180));y1=int(y1+length*sin(a1*PI/180));lineto(x1,y1);Draw(x1,y1,a1,length*d,num-1);break;case '+':a1=(a1+angel)%360;break;case '-':a1=(a1-angel)%360;break;case '[':state[i].x=x1;state[i].y=y1;state[i].a=a1;i++;break;case ']':i--;x1=state[i].x;y1=state[i].y;a1=state[i].a;break;}p++;}}void main(){int gd,gm;initgraph(&gd,&gm,"");setcolor(GREEN);Draw(400,450,270,50,4);getch();closegraph();}截图:实验3:M集:代码:#include<stdio.h>#include<graphics.h>#include<conio.h>#include<math.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;}COMPLEX operator + (COMPLEX a, COMPLEX b){COMPLEX c;c.re = a.re + b.re;c.im = a.im + b.im;return c;}double norm(COMPLEX t){return t.re *t.re -t.im *t.im;}void main(){COMPLEX c,z;int max_iterations=256,row,col,color,gd=DETECT,gmode;double max_size=1000.0,XMax,XMin,YMax,YMin,deltaP,deltaQ;initgraph(&gd,&gmode," ");XMax=1.5;XMin=-2.2;YMax=1.5;YMin=-2.2;deltaP=(XMax-XMin)/800;deltaQ=(YMax-YMin)/600;for(col=0;col<800;col++){for(row=0;row<600;row++){c.re=XMin+col*deltaP;c.im=YMax-row*deltaQ;z.re=0;z.im=0;color=0;while((color<max_iterations)&&(norm(z)<max_size)){z=z*z+c;color+=5;}if(color>=max_iterations)color=1;putpixel(col,row,color);}getch();closegraph();}截图:J集代码:#include<stdio.h>#include<graphics.h>#include<conio.h>#include<math.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;}double norm(COMPLEX t){return t.re *t.re -t.im *t.im;}void main(){COMPLEX c,z;int max_iterations=256,row,col,color,gd=DETECT,gmode;double max_size=1000.0,XMax,XMin,YMax,YMin,deltaP,deltaQ;initgraph(&gd,&gmode," ");XMax=1.5;XMin=-2.2;YMax=1.5;YMin=-2.2;deltaP=(XMax-XMin)/800;deltaQ=(YMax-YMin)/600;for(col=0;col<800;col++){for(row=0;row<600;row++){z.re=XMax-col*deltaP;z.im=YMax-row*deltaQ;c.re=-1.1;c.im=0;color=0;while((color<max_iterations)&&(norm(z)<max_size)){z=z*z+c;color+=7;}if(color>=max_iterations)color=255;putpixel(col,row,color);}}getch();closegraph(); }截图。

koch雪花的自相似维数

koch雪花的自相似维数

koch雪花的自相似维数
Koch雪花是一种基于分形几何学的图形,具有自相似性。

自相似性是指图形的部分与整体相似,即缩放后可以得到相似的图形。

而自相似维数则是用于描述自相似性的一个数学概念。

Koch雪花的自相似维数可以通过计算其分形维数来得到。

分形维数是一种用于描述分形对象大小的指标,它可以帮助我们理解自相似图形的特征。

在计算Koch雪花的自相似维数时,我们可以先将其分解成一系列相似的子图形,然后通过计算每个子图形被缩小的比例来得到分形维数。

具体计算方法为:
1. 将Koch雪花分解成四个相似的子雪花;
2. 计算每个子雪花相对于原始图形的缩放比例,即为1/3;
3. 用公式D=log(N)/log(r)来计算分形维数,其中N为子雪花的数量,r为缩放比例;
4. 将四个子雪花的分形维数加起来并除以4,即为Koch雪花的自相似维数。

通过计算,我们可以得到Koch雪花的自相似维数为log(4)/log(3),即约为1.2619。

这意味着Koch雪花的自相似性非常强,每个部分都是整体的缩小版本,并且可以无限缩小下去。

图形学上机实验报告讲解

图形学上机实验报告讲解

计算机图形学上机实验报告实验一:kock分形雪花图案的绘制一、实验目的与要求目的:1.通过实验初步了解OPENGL。

2通过上机编程掌握OPENGL的画图机理和OPENGL。

要求:1.了解分形绘图的过程。

二、实验内容以Kock曲线为例,说明分形图形是如何生成的。

Kock曲线的初始生成元是一条直线段,生成规则是将直线段均分为三等分,首尾两端保持不变,中间用两端等长且互成60度角的直线段代替。

迭代公式如下:分别迭代1,3,6次,并记录结果。

三、实验结果实验结果图如下:3-1第一次分形3-2三次分形3-3六次分形四、体会通过这次实验了解到了分形系统的从图元到图形的形成过,分形在图形学的应用中,可以用来表示岩层、云、水、树、等。

并且亲手实现了“雪花”的分形图形。

通过迭代次数可控制图形的不同。

掌握了分形系统的形成过程。

完成了此次试验目的。

五、源程序void drawline(pt pt1, pt pt2)//绘制线{glBegin(GL_LINES);glVertex2d(pt1.x, pt1.y);glVertex2d(pt2.x, pt2.y);glEnd();}void drawkoch(pt pt1, pt pt2, int n)//n为确定的迭代次数{pt p1, p2, p3, p4, p5;glColor3f(0.0, 0.0, 0.0);p1.x = pt1.x;p1.y = pt1.y;p2.x = pt2.x;p2.y = pt2.y;if (n == 1){ drawline(p1, p2); }if (n>1){p3.x = p1.x + (-p1.x + p2.x) / 3;p3.y = p1.y + (-p1.y + p2.y) / 3;p4.x = p1.x + 2 * (-p1.x + p2.x) / 3;p4.y = p1.y + 2 * (-p1.y + p2.y) / 3;p5.x = (p4.x - p3.x) / 2 - (p4.y - p3.y)*sqrt(3.0) / 2 + p3.x;p5.y = (p4.y - p3.y) / 2 + (p4.x - p3.x)*sqrt(3.0) / 2 + p3.y;drawkoch(p1, p3, n - 1);drawkoch(p3, p5, n - 1);drawkoch(p5, p4, n - 1);drawkoch(p4, p2, n - 1);}if (n == 0)exit(0);}void display(void){glClear(GL_COLOR_BUFFER_BIT);pt p1, p2, p3;p1.x = 30;p1.y = 30;p2.x = 110;p2.y = 30;p3.x = 70;p3.y = 30 + 40 * sqrt(3.0);int n;do{//循环改变迭代次数glClear(GL_COLOR_BUFFER_BIT);printf("请输入Koch雪花的迭代次数,或输入0退出:");scanf("%d", &n);drawkoch(p1, p3, n);drawkoch(p3, p2, n);drawkoch(p2, p1, n);glFlush();} while (n != 0);}int main(int argc, char**argv){glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowPosition(50, 100);glutInitWindowSize(500, 400);glutCreateWindow("KOCHCURVE");init();glutDisplayFunc(display);glutMainLoop();return 0;}实验二:星球环绕模型一、实验目的与要求目的:1.通过实验初步了解OpenGL中的深度测试缓存器算法。

数学实验迭代:分形

数学实验迭代:分形

迭代:分形姓名:学号:班级:数学与应用数学4班实验报告实验目的:以迭代的观点介绍分形的基本特性以及生成分形图形的基本方法,使读者在欣赏美丽的分形图案的同时对分形几何这门学科有一个直观的了解,并从哲理的高度理解这门学科诞生的必然,激发读者探寻科学真理的兴趣。

实验环境:Mathematica软件实验基本理论和方法:在19世纪末及20世纪初,一些数学家就构造出一些边界形状极不光滑的图形,而这类图形的构造方式都有一个共同的特点,即最终图形F都是按照一定的规则R通过对初始图形不断修改得到的。

其中最有代表性的图形是Koch曲线,Koch曲线的构造方式是:给定一条直线段,将该直线段三等分,并将中间的一段用以该线段为边的等边三角形的另外两条边代替,得到图形,然后再对图形中的每一小段都按上述方式修改,以至无穷。

则最后得到的极限曲线即是所谓的Koch曲线。

生成元:Koch曲线的修改规则R是将每一条直线段用一条折线代替,我们称为该分形的生成元。

分形的基本特性完全由生成元确定,因此,给定一个生成元,我们就可以生成各种各样的分形图形。

Julia集绘制方法:(1)设定初值p,q,一个最大的迭代次数N,图形的分辨率的大小a,b,和使用的颜色数(如K=16)(或者给定灰度级L);(2)设定一个上界值;(3)将矩形区域分成的网格,分别以每个网格点,,,,作为初值利用riter做迭代(实际上,只需对满足的初值点做迭代)。

如果对所有,,则将图形的像素点用黑色显示,否则,如果从迭代的某一步开始有,则用modK种颜色显示相应像素(或者用相应的灰度级显示)。

Mandelbrot集绘制方法:设定一个最大的迭代次数N,图形的分辨率的大小a,b,和使用的颜色数(如K=16)(或者给定灰度级L);(2)设定一个上界值;(3)将矩形区域分成的网格,分别以每个网格点,,,,作为参数值利用riter做迭代(实际上,只需对的初值点做迭代),每次迭代的初值均取为。

华工数学实验-作业3-迭代与分形

华工数学实验-作业3-迭代与分形

《数学实验》报告学院:电子与信息学院专业班级:通信工程4班学号:*************名:***实验名称:迭代与分形实验日期:2013.04.7第三次实验1. 实验内容1.对一个等边三角形,每条边按照Koch 曲线的方式进行迭代,产生的分形图称为Koch 雪花。

编制程序绘制出它的图形,并计算Koch 雪花的面积,以及它的分形维数。

2. 实验过程方法一仿照Koch 曲线代码对三角形的每条边进行Koch 曲线化,函数的输入参数有三角形的边长R 和迭代次数k,输出Koch 雪花图形以及雪花所围面积S.KochSnow 面积推导如下所示:迭代次数k 面积S0: S=24r1: 2+ (13R)2*32: 2+ (13R)2*3 + 13)2R)2*323: S=4R 2+ 4(13R)2*3 + 4((13)2R)2*32 + 4((13)3R)2*33 ``````N: R 2+ 13R)2*3 + ((13)2R)2*32 + ((13)3R)2*33+…((13)n R)2*3n 如此相加下去,当N 无穷时,S 将为无穷大源代码如下:function kochsnow(R,k) %R为正三角形边长,k为迭代次数p01=[0,0];p02=[R/2,sqrt(3)*R/2];p03=[R,0]; %3个起始点S = 0; % S为面积,开始设为0 for line=0:2 %依次对3条边进行Koch曲线运算if line==0;p=[p01;p02];elseif line==1;p=[p02;p03];else line==2;p=[p03;p01];endn=1; %存放线段的数量,初始值为1A=[cos(pi/3),-sin(pi/3);sin(pi/3),cos(pi/3)]; %变换矩阵用于计算新的结点for s=1:kj=0; % j为行数for i=1:nq1=p(i,:); %目前线段的起点坐标q2=p(i+1,:); %目前线段的终点坐标d=(q2-q1)/3;j=j+1;r(j,:)=q1; %原起点存入rj=j+1;r(j,:)=q1+d; %新1点存入rj=j+1;r(j,:)=q1+d+d*A'; %新2点存入rj=j+1;r(j,:)=q1+2*d; %新3点存入rendn=4*n; %全部线段迭代一次后,线段数量乘4clear p %清空p ,注意:最后一个终点q2不在r中p=[r;q2]; %一条边的全部结点clear rendif line==0; %把第一条边的全部结点放在aa=p;elseif line==1; %把第二条边的全部结点放在bb=p;else line==2; %把第三条边的全部结点放在cc=p;endendall=[a;b;c]; %三条边全部结点放入all plot(all(:,1),all(:,2)) %连接各个结点fill(all(:,1),all(:,2),'g')%填充所围区域for i=0:k %计算KochSnow的面积S = S + (3^(0.5-i))*0.25*(R^2);endSaxis equalKoch雪花图形输入半径R=2K=0时是正三角形此时面积为 1.7321K=1时是正六边形此时面积为 2.3094 K=2时的koch雪花此时面积为 2.5019K=3时的Koch雪花此时面积为 2.5660 K=4时的Koch雪花此时面积为 2.5874分形维数:根据迭代的规律得到:相似形个数:m=6 边长放大倍数:c=3,d m c=÷=÷=1.631ln ln ln6ln3方法2只生成一次Koch曲线,然后对生成的Koch曲线进行旋转变换,旋转3次即可得到所需图形。

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

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。

3.用polyarea(x,y)命令求其面积。

实验程序:function koch0(P,N)if nargin==0,P=[0 0;1/2 sqrt(3)/2;1 0;0 0];N=11;endn=max(size(P))-1;A=[cos(pi/3) -sin(pi/3);sin(pi/3) cos(pi/3)];L=3dx=diff(P(:,1));dy=diff(P(:,2));C=sum(sqrt(dx.^2+dy.^2))S=polyarea(P(:,1),P(:,2))figure(1),plot(P(:,1),P(:,2))axis offaxis imagefor k=2:Np1=P(1:n,:);p2=P(2:n+1,:);d=(p2-p1)/3;q1=p1+d;q3=p1+2*d;q2=q1+d*A';n=4*n;II=1:4:n-3;P(II,:)=p1;P(II+4,:)=p2;P(II+1,:)=q1;P(II+2,:)=q2;P(II+3,:)=q3;figure(k),plot(P(:,1),P(:,2))axis offaxis imagedx=diff(P(:,1));dy=diff(P(:,2));N=kL=nC=sum(sqrt(dx.^2+dy.^2))S=polyarea(P(:,1),P(:,2))end实验结果及分析:NKoch 分形雪花N L N C N S13 3 0.4330212 4 0.5774348 5.3333 0.64154192 7.1111 0.67005768 9.4815 0.682763072 12.6420 0,.6883712288 16.8560 0.6908849153 22.4746 0.69199196608 29.9662 0.692410786432 39.9549 0.6926113145728 53.2732 0.6927由N 与N L ,N C ,N S 的数值关系我们可以得到以下式子:()1431-⨯=N N L()+∞=∞→)(lim 2N N P length()6928.0)(lim 3=∞→N N P area理论分析:Koch 分形雪花是一条连续的曲线,永远不会自我相交,因为每边上新加的三角形都足够小,以致彼此都碰不上。

每一次变换在曲线内部增加一点面积。

但总面积仍然是有限的。

事实上比初始的三角形大不了多少。

如果画一个外接圆把初始的三角形包起来,Koch 分形雪花的周长曲线永远不会超出这个圆之外。

然而,曲线本身却是无限之长。

从而出现了面积有限,周长为无限长的矛盾结果。

这也说明了Koch 分形雪花的周长曲线是个分形曲线,它的维数是大于1的.当初始三角形边长为1时,每做一次迭代,每条变进化为4条边,边数为原来的4倍,故:143-⨯=N N L ;周长为原来的34倍,故123-⨯=N N C ,特别的,+∞=∞→N N C lim 。

由几何关系,N=1时,431=S ,每做一次迭代增加的面积为 ,3,2,9416331=⎪⎭⎫⎝⎛⨯=∆-i S N i ,⎪⎪⎩⎪⎪⎨⎧=-+==∆+=-=∑,3,2],)94(1[2033431,43121N N S S S N N i i N 特别的6928.0lim =∞→n n S实验结论:()1431-⨯=N N L()+∞=∞→)(lim 2N N P length()6928.0)(lim 3=∞→N N P area参考文献[1] 钟尔杰, 黄廷祝,数学实验方法[M].四川:电子科技大学数学科学院,2012. [2] 孙洪泉.f 分形几何与分形插值[M].北京:科学出版社,2011.竞赛题的实验设计2012年4月7日(常青2010102020028 胡佳慧2010102020029 伍叙励2010102010030) 绘制连接多边形三等分点的内接多边形,探讨其边数面积等性质。

实验内容:设P1为边长等于1的等边三角形,P2是由P1之各边3等分点连接成的六边形,······,1+N P 是由N P 之各边3等分点连成的多边形。

实验目的:1.绘制连接多边形三等分点的内接多边形2.试证N P 的边数为:12*3-=N N L3.求N P 所围面积和面积数列的极限 )(lim N N P area ∞→实验原理:1.将上代正多边形每边三等分,保留中段,并新产生一条连接第二三等分点和下顺位(本次实验是逆时针)线段的第一三等分点的线段。

算法针对每条线段逐步进行,将计算新产生的两个点。

第一个点位于线段的三分之一处。

第二个点位于线段的三分之二处。

流程图如下:()()()();;2;32;31221112121211Q P Q P P P P Q P P P Q ←←-+←-+←2.由于新生成的内接多边形是凸多边形,边数=顶点数=P 矩阵的行数-13.用polyarea(x,y)命令求其面积实验程序:function koch2(P,N)if nargin==0,P=[0 0;1/2 sqrt(3)/2;1 0;0 0];N=2;end n=max(size(P))-1;figure(1), plot(P(:,1),P(:,2)) for k=1:N-1p1=P(1:n,:);p2=P(2:n+1,:);d=(p2-p1)/3;q1=p1+d;q3=p1+2*d;n=2*n;II=1:2:n-1;P(II,:)=q1;P(II+1,:)=q3;P(n+1,:)=P(1,:);dx=diff(P(:,1));dy=diff(P(:,2));line(P(:,1),P(:,2))axis offaxis imageendfigure(2),plot(P(:,1),P(:,2))axis offaxis imageNnC=sum(sqrt(dx.^2+dy.^2))S=polyarea(P(:,1),P(:,2)实验结果及分析:N 操作步骤内接多边形N L N C N S1 3 3 0.43332 6 2 0.28873 12 1.8214 0.25664 24 1.7830 0.24955 48 1.7743 0.24796 96 1.7722 0.2475由上表可得:()()()2474.0)(lim 37715.1)(lim 22311==⨯=∞→∞→-N N N N N N P area P length L理论分析:每次迭代都是将上代正多边形每边三等分,保留中段,并新产生一条连接第二三等分点和下顺位(本次实验是逆时针)线段的第一三等分点的线段。

换句话说,上代正多边形的每条边都新产生两条新边。

由此,12*3-=N N L 。

做11次迭代后产生的内接多变行类似正六边形。

∞→N ,形似圆。

《周髀算经》中有这样一个记载:“圆出于方,方出于矩”,这是说最初的圆是由正方形不断地切割而来的。

实验结论:()()()2474.0)(lim 37715.1)(lim 22311==⨯=∞→∞→-N N N N N N P area P length L7192 1.7717 0.24758384 1.7715 0.24749768 1.7715 0.2474101536 1.7715 0.2474113072 1.7715 0.2474126144 1.7715 0.2474参考文献[1] 钟尔杰, 黄廷祝,数学实验方法[M].四川:电子科技大学数学科学院,2012.瑞士国土面积计算实验报告2012年4月7日(常青2010102020028 胡佳慧2010102020029 伍叙励2010102010030)通过瑞士国土边界的坐标,计算出国土周长和面积。

实验内容:为了算出瑞士国土的面积,首先根据地图作如下测量:以西向东方向为x 轴,由南到北方向为y 轴,选择方便的原点,并将从最西边界点到最东边界点在x 轴上的区间适当地划分为若干段,在每个分点的y 方向测出南边界点和北边界点的y 坐标y 1和y 2,这样就得到表中数据(单位:英里)。

根据地图比例我们知道18英里相当于40公里,由该些数据计算瑞士国土面积,在与官方数据41288 km 2比较。

实验目的:1.计算瑞士国土的面积)(lim N N D area ∞→。

2.计算瑞士边界长度)(D length实验原理:将已知的瑞士国土边界坐标点输入新建的TXT 文件中,载入程序,通过函数plot 画图,由公式22y x d +=求相邻两点间距离,加和即为瑞士国土边界长度)(D length 。

国土面积面积可由Matlab 中polyarea 函数求得。

相关文档
最新文档