143分形_ 雪花曲线_ mathematica 程序.docVIP

  • 15
  • 0
  • 约5.16千字
  • 约 12页
  • 2019-04-19 发布于江西
  • 举报
PAGE PAGE 4 1.4.3 Koch雪花曲线的MATHEMATIC程序设计 (王积社) 1.4.3.1 试验问题: Koch雪花曲线的MATHEMATIC程序设计. 1.4.3.2 试验目的: ① 掌握MATHEMATIC迭代程序设计方法; ② 用MATHEMATIC作出Koch雪花曲线; ③ 通过试验,认识分形的妙处,掌握分形程序设计基本方法。 1.4.3.3 问题分析 1.4.3.3.1 算法分析: ABBACD E A B B A C D E 可见,从几何作图方法来看,生成的方法为:把线段AB三等分,得到分点C、E,再把向量CE绕C逆时针旋转60o得到D点,这样图形就生成了。 2o 为了便于计算和处理,我们把图形放在坐标系中。设线段AB的两端点的坐标为A(x1,y1)、B(x2,y2),则Koch雪花曲线的生成元的关系可用向量表示为: A A(x1,y1) C D E B(x2,y2) y x o 可见,要想确定雪花曲线的生成元,关键是确定C、D、E点的坐标,为此,应该分析图中的向量关系. 3o 分析图中的向量关系: ① 先分析向量: 这样即得: ② 再分析向量: 是由旋转60o而得,于是令矩阵:,则有: 而又 A(x A(x1,y1) C D E B(x2,y2) y x o 所以 从而 于是我们可用来表示. 4o 以上过程可以说是从向量出发,求出了向量、,相当于从点集{A、B}出发求得了点集{A、C、D、E、B}. 5o 对点集{A、C}、{C、D}、{D、E}、{E、B}分别重复上面的过程(即迭代),…,如此下去(有限次) 6o 将所上面所生成的相应的点对连线,即可做出Koch雪花曲线. 1.4.3.3.2 Mathematica的画线功能: 要作出雪花曲线,需要将点连线,即需要Mathematica的画线功能,经查可知Mathematica的“画线”功能函数为: Line[{{x1,y1},{x2,y2},…}](P224)—— 依次连接相邻两点的线段,作如下试验,输入: a={{0,0},{1,0},{1,1},{0,1},{0,0}}; Line[a] 如果连线成功的话,应该是一个矩形,然而运行结果如下: 未得所想,原因是Line[a]只是一种“意连”,但不真正画出线条(或者说没有显示出线条),然而我们想到Show[]可以显示图形,于是试输入: Show[Line[a]] 希望显示出图形,可是运行结果却为: 可见有错,错误提示的意思是“Line”不是图形元素,于是需要将“Line”转换为图形元素,这需要Graphics[]来完成,总之于是应输入以下命令: Show[Graphics[Line[a]]] 这样可得到: 请大家注意这种做法。 1.4.3.3.3 算法大意: 1) 取点a(0,0)、b(0,1),以其坐标做集合ab={a、 b} a a b b a c d e 记: L=|ab|=2 (ab的长度,即元素个数) 2) 求点c、e 3) 求点d 4) 令:tmp={a,c,d,e,b}。 5) 对点集{{a、c}、{c、d}、{d、e}、{e、b}}中的每对点分别重复上面的过程(迭代). 6) 依次连接上面所生成的相邻的点,即可划出雪花曲线。 将1)~4)设计成一个从点集ab出发,构作点集tmp的模块(定义为函数“koch”),当“ab”中点较多时,应循环实现。 1.4.3.3.4 算法框图: 由上面的分析,可得以下的算法框图 定义模块 说明内部变量:临时表tmp、循环变量i=1To L(表ab的长度)、角度变量jd(初值60o)、变换矩阵T及c、d、e等 For[i=1,iL,i++] 模块结束,返回“tmp” 计算:c、d、e的值 计算结果依次填入到“tmp”中 迭代,生成雪花曲线

文档评论(0)

1亿VIP精品文档

相关文档