资源描述:
《1.4.3 分形_ 雪花曲线_ mathematica 程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1.4.3Koch雪花曲线的MATHEMATIC程序设计(王积社)1.4.3.1试验问题:Koch雪花曲线的MATHEMATIC程序设计.1.4.3.2试验目的:①掌握MATHEMATIC迭代程序设计方法;②用MATHEMATIC作出Koch雪花曲线;③通过试验,认识分形的妙处,掌握分形程序设计基本方法。1.4.3.3问题分析1.4.3.3.1算法分析:ABBACDE1o雪花曲线的生成元为:可见,从几何作图方法来看,生成的方法为:把线段AB三等分,得到分点C、E,再把向量CE绕C逆时针旋转60o得到D点,这
2、样图形就生成了。2o为了便于计算和处理,我们把图形放在坐标系中。设线段AB的两端点的坐标为A(x1,y1)、B(x2,y2),则Koch雪花曲线的生成元的关系可用向量表示为:A(x1,y1)CDEB(x2,y2)yxo12可见,要想确定雪花曲线的生成元,关键是确定C、D、E点的坐标,为此,应该分析图中的向量关系.3o分析图中的向量关系:①先分析向量:这样即得:②再分析向量:是由旋转60o而得,于是令矩阵:,则有:而又12A(x1,y1)CDEB(x2,y2)yxo,所以从而于是我们可用来表示.4o以上过程可
3、以说是从向量出发,求出了向量、,相当于从点集{A、B}出发求得了点集{A、C、D、E、B}.5o对点集{A、C}、{C、D}、{D、E}、{E、B}分别重复上面的过程(即迭代),…,如此下去(有限次)6o将所上面所生成的相应的点对连线,即可做出Koch雪花曲线.1.4.3.3.2Mathematica的画线功能:要作出雪花曲线,需要将点连线,即需要Mathematica的画线功能,经查可知Mathematica的“画线”功能函数为:Line[{{x1,y1},{x2,y2},…}](P224)——依次连接相
4、邻两点的线段,作如下试验,输入:a={{0,0},{1,0},{1,1},{0,1},{0,0}};Line[a]如果连线成功的话,应该是一个矩形,然而运行结果如下:未得所想,原因是Line[a]只是一种“意连”,但不真正画出线条12(或者说没有显示出线条),然而我们想到Show[]可以显示图形,于是试输入:Show[Line[a]]希望显示出图形,可是运行结果却为:可见有错,错误提示的意思是“Line”不是图形元素,于是需要将“Line”转换为图形元素,这需要Graphics[]来完成,总之于是应输入以下
5、命令:Show[Graphics[Line[a]]]这样可得到:请大家注意这种做法。1.4.3.3.3算法大意:1)取点a(0,0)、b(0,1),以其坐标做集合ab={a、b}abbacde记:L=
6、ab
7、=2(ab的长度,即元素个数)122)求点c、e3)求点d4)令:tmp={a,c,d,e,b}。5)对点集{{a、c}、{c、d}、{d、e}、{e、b}}中的每对点分别重复上面的过程(迭代).6)依次连接上面所生成的相邻的点,即可划出雪花曲线。将1)~4)设计成一个从点集ab出发,构作点集tmp的模
8、块(定义为函数“koch”),当“ab”中点较多时,应循环实现。1.4.3.3.4算法框图:由上面的分析,可得以下的算法框图定义模块说明内部变量:临时表tmp、循环变量i=1ToL(表ab的长度)、角度变量jd(初值60o)、变换矩阵T及c、d、e等For[i=1,i9、ist],给出表中元素的个数(p215)Block[{tmp={},i,L=Length[ab],Degree,度(p212)jd=60Degree,sa=Sin[jd],ca=Cos[jd],c,d,e,T={{ca,-sa},{sa,ca}}},For[i=1,i10、 得到一个由这几个表的元素顺序连接起来构成的表];Return[tmp]]pt={{0,0},{1,0}};Show[Graphics[Line[Nest[koch,pt,5]],AspectRatio->Sqrt[3]/6]]Nest[f,expr,n] f对expr作用n次AspectRatio->1/GoldenRatio生成图形的纵横比⑸运行结果: 迭代1次:12迭代2次:迭代3次:迭代4次: