资源描述:
《143分形_雪花曲线_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算法分析:1°雪花曲线的生成元为:D可见,从儿何作图方法來看,生成的方法为:把线段AB三等分,得到分点C、E,再把向量CE绕C逆时针旋转60°得到D点,这样图形就生成了。2°为了便于计算和处理,我们把图形放在坐标系屮。设线段AB
2、的两端点的坐标为A(xbyj.B(x2,yj,则Koch雪花曲线的生成元的关系可用向量表示为:可见,要想臓雪花曲线的生成元,关键是确定C、D、E点的坐标S为此,应y__i__2一[_=+丽•芮丿二-OA+-OB333该分析图中的向量关系.3°分析图中的向量关系:①先分析向量况:OC-OA=^C=-AB而AB=OB~OA同理可得:oe=Loa+^ob这样即得:OC=-OA+-OB33OE=-OA+-OB33②再分析向量OD:丽是由圧旋转60°而得,于是令矩阵:Tcos60"sin60“-sin60pcos60"CD=TCE而又所以CD=OD—OC,CE=OE-OCOD-
3、OC=T.(OE-OC)从而OD=OC+T.(OE-OC)于是我们可用刃、帀来表示况、0D、0E.4°以上过程可以说是从向量丙、面出发,求出了向量丙、帀、0C.0D.0E9相当于从点集{A、B}出发求得了点集{A、C、D、E、B}.5°对点集{A、C}、{C、D}、{D、E}、{E、分别重复上而的过程(即迭代),…,如此下去(有限次)6°将所上面所生成的和应的点对连线,即可做出Koch雪花曲线.1.4.3.3.2Mathematica的画线功能:要作出雪花曲线,需要将点连线,即需要Mathematica.的画线功能,经查可知Mathematica的“画线”功能函数为:
4、Line[{{xl,yl},{x2,y2},-}](P224)——依次连接相邻两点的线段,作如下试验,输入:a二{{0,0},{1,0},{1,1},{0,1},{0,0}};Line[a]如果连线成功的话,应该是一个矩形,然而运行结果如下:I叩产a={{0,0},{1,0},{1,1},{0,1},{0,0}};Line[a]0utp]=Line[{{0,0},{lz0},{1,1}Z{0,1}Z{0,0}}]未得所想,原因是Line[a]只是一种“意连”,但不真正画出线条(或者说没有显示出线条),然而我们想到Show:]可以显示图形,于是试输入:Show[Line
5、[a]]希望显示出图形,可是运行结果却为:in[4]:=Shov[Line[a]]Show::grtype:Lineisnot:atyp-eofgraphic5.0ut[4]=Show[Line[{{0,0},{1,0},{1,1},{0z1}Z{0,0}}]]可见有错,错误提示的意思是“Line”不是图形元素,于是需要将“Line”转换为图形元素,这需要Graphics[]来完成,总之于是应输入以下命令:Show[Graphics[Line[a]]]这样可得到:In[5]:=Shov[Graphics[Line[a]]]Out[5]=■Graphics请大家注意这种
6、做法。1.4.3.3.3算法大意:1)取点a(0,0)>b(0,1),以其坐标做集合ab二{a、b}E:L二ab=2(ab的长度,即元素个数)2)求点c、ec=扌°+*"=
7、-«/?[[l]]+y6Z/?[[2]]"扎+)丄必[[1]]+
8、■必[⑵]33333)求点dd=T・(e_c)4)令:tmp={a,c,d,c,b}。5)对点集{{a、c}、{c、d}、{d、e}、{e>b}}中的每对点分别重复上面的过程(迭代).6)依次连接上面所生成的相邻的点,即可划出雪花曲线。将1)〜4)设计成一个从点集ab出发,构作点集tmp的模块(定义为函数“koch”),当“ab”中
9、点较多时,应循环实现。1.4.3.4koch[ab_List]:二Block[{tmp={},i,L二Length[ab],丿Length[list],给出表中元素的个数(p215)jd=60Degree,Degree,度(p2i2)1・4・3・3・4算法框图:由上面的分析,可得以下的算法框图定义函数koch,参数为ab(类型为表),函数休为模块定义模块说明内部变量:临时表tmp、循环变量匚=1ToL(表ab的长度)、角度变量jd(初值60。)、变换矩阵T及c、d、e等For[i=l,i