1分形图基本图形以及源程序
- 格式:doc
- 大小:534.50 KB
- 文档页数:19
分形图基本图形以及源程序第一部分本人新手,如有错误请指正。
程序完成于2011/6/17晚间到2011/6/18。
很多变量名称采用的是同学的姓名拼音,为的是告诉大家这些都是可以随意命名的变量或函数名,一般大写字母开头的是系统定义的变量不可以随意更改。
一、(*雪花*)源程序lovelyduwangen[zhengguojie_List]:=Block[{weihuayan={},i,wuxiaonan=Length[zhe ngguojie],gengping=60Degree,sa=Sin[gengping],ca=Cos[gengping],c,d,e,T={{ca,-sa} ,{sa,ca}}},For[i=1,i< wuxiaonan,i++,c=zhengguojie[[i]]*2/3+zhengguojie[[i+1]]/3;e=zhengguojie[[i]]/3+zhengguojie[[i+1]]*2/3;d=c+T.(e-c);weihuayan=Join[weihuayan,{zhengguojie[[i]],c,d,e,zhengguojie[[i+1]]}]];weihuayan]dongquanfa={{0,0},{1/2,Sqrt[3]/2},{1,0},{0,0}};Show[Graphics[Line[Nest[lovelyduwangen,dongquanfa,0]],AspectRatio→Sqrt[3]/2]] Show[Graphics[Line[Nest[lovelyduwangen,dongquanfa,5]],AspectRatio→Sqrt[3]/2]] 基本生成元二、(*上三角下三角1*)lovelyduwangen[zhengguojie_List]:=Block[{weihuayan={},i, wuxiaonan =Length[zhengguojie],gengping=60Degree,sa=Sin[gengping],ca=Cos[gengping],c,d,g ,f,e,T={{ca,-sa},{sa,ca}},S={{ca,sa},{-sa,ca}}},For[i=1,i< wuxiaonan,i++,c=zhengguojie[[i]]*3/4+zhengguojie[[i+1]]/4;e=zhengguojie[[i]]/2+zhengguojie[[i+1]]/2;f=zhengguojie[[i]]/4+zhengguojie[[i+1]]*3/4;d=c+T.(e-c);g=e+S.(f-e);weihuayan=Join[weihuayan,{zhengguojie[[i]],c,d,e,g,f,zhengguojie[[i+1]]}]];weihuayan]dongquanfa={{0,0},{1,0}};Show[Graphics[Line[Nest[lovelyduwangen,dongquanfa,1]],AspectRatio→Sqrt[3]/2]] Show[Graphics[Line[Nest[lovelyduwangen,dongquanfa,4]],AspectRatio→Sqrt[3]/2]] 基本生成元(*上三角下三角2*)lovelyduwangen[zhengguojie_List]:=Block[{weihuayan={},i, wuxiaonan =Length[zhengguojie],gengping=60Degree,sa=Sin[gengping],ca=Cos[gengping],c,d,g ,f,e,T={{ca,-sa},{sa,ca}},S},For[i=1,i< wuxiaonan,i++,c=zhengguojie[[i]]*3/4+zhengguojie[[i+1]]/4;e=zhengguojie[[i]]/2+zhengguojie[[i+1]]/2;f=zhengguojie[[i]]/4+zhengguojie[[i+1]]*3/4;d=c+T.(e-c);S=Transpose[T];g=e+S.(f-e);weihuayan=Join[weihuayan,{zhengguojie[[i]],c,d,e,g,f,zhengguojie[[i+1]]}]];weihuayan]dongquanfa={{0,0},{1,0}};Show[Graphics[Line[Nest[lovelyduwangen,dongquanfa,1]],AspectRatio→Sqrt[3]/2]] Show[Graphics[Line[Nest[lovelyduwangen,dongquanfa,4]],AspectRatio→Sqrt[3]/2]]图形同上(*上三角下三角3*)lovelyduwangen[zhengguojie_List]:=Block[{weihuayan={},i, wuxiaonan =Length[zhengguojie],gengping=90Degree,sa=Sin[gengping],ca=Cos[gengping],c,d,d 1,g1,g,f,e,T={{ca,-sa},{sa,ca}},S},For[i=1,i< wuxiaonan,i++,c=zhengguojie[[i]]*3/4+zhengguojie[[i+1]]/4;e=zhengguojie[[i]]/2+zhengguojie[[i+1]]/2;f=zhengguojie[[i]]/4+zhengguojie[[i+1]]*3/4;d=c+T.(e-c);d1=d+e-c;S=Transpose[T];g=e+c-d;g1=g+f-e;weihuayan=Join[weihuayan,{zhengguojie[[i]],c,d,d1,e,g,g1,f,zhengguojie[[i+1]]}]];weihuayan]dongquanfa={{0,0},{1,0}};Show[Graphics[Line[Nest[lovelyduwangen,dongquanfa,1]],AspectRatio→1/2]] Show[Graphics[Line[Nest[lovelyduwangen,dongquanfa,4]],AspectRatio→1/2]]图形同上三、(*上正方下正方形*)lovelyduwangen[zhengguojie_List]:=Block[{weihuayan={},i, wuxiaonan =Length[zhengguojie],gengping=90Degree,sa=Sin[gengping],ca=Cos[gengping],c,d,d 1,g1,g,f,e,T={{ca,-sa},{sa,ca}},S},For[i=1,i< wuxiaonan,i++,c=zhengguojie[[i]]*3/4+zhengguojie[[i+1]]/4;e=zhengguojie[[i]]/2+zhengguojie[[i+1]]/2;f=zhengguojie[[i]]/4+zhengguojie[[i+1]]*3/4;d=c+T.(e-c);d1=e+T.(f-e);S=Transpose[T];g=e+S.(f-e);g1=f+S.(f-e);weihuayan=Join[weihuayan,{zhengguojie[[i]],c,d,d1,e,g,g1,f,zhengguojie[[i+1]]}]];weihuayan]dongquanfa={{0,0},{1,0}};Show[Graphics[Line[Nest[lovelyduwangen,dongquanfa,1]],AspectRatio→1/2]] Show[Graphics[Line[Nest[lovelyduwangen,dongquanfa,4]],AspectRatio→1/2]]基本生成元分形图四、(*下正方形上正方形*)lovelyduwangen[zhengguojie_List]:=Block[{weihuayan={},i, wuxiaonan =Length[zhengguojie],gengping=90Degree,sa=Sin[gengping],ca=Cos[gengping],c,d,d 1,g1,g,f,e,T={{ca,-sa},{sa,ca}},S},For[i=1,i< wuxiaonan,i++,c=zhengguojie[[i]]*3/4+zhengguojie[[i+1]]/4;e=zhengguojie[[i]]/2+zhengguojie[[i+1]]/2;f=zhengguojie[[i]]/4+zhengguojie[[i+1]]*3/4;S=Transpose[T];d=c+S.(e-c);d1=e+S.(f-e);g=e+T.(f-e);g1=f+T.(f-e);weihuayan=Join[weihuayan,{zhengguojie[[i]],c,d,d1,e,g,g1,f,zhengguojie[[i+1]]}]];weihuayan]dongquanfa={{0,0},{1,0}};Show[Graphics[Line[Nest[lovelyduwangen,dongquanfa,1]],AspectRatio→1/2]] Show[Graphics[Line[Nest[lovelyduwangen,dongquanfa,4]],AspectRatio→1/2]]基本生成元分形图五、(*下三角上三角*)lovelyduwangen[zhengguojie_List]:=Block[{weihuayan={},i, wuxiaonan =Length[zhengguojie],gengping=60Degree,sa=Sin[gengping],ca=Cos[gengping],c,d,g ,f,e,T={{ca,-sa},{sa,ca}},S},For[i=1,i< wuxiaonan,i++,c=zhengguojie[[i]]*3/4+zhengguojie[[i+1]]/4;e=zhengguojie[[i]]/2+zhengguojie[[i+1]]/2;f=zhengguojie[[i]]/4+zhengguojie[[i+1]]*3/4;S=Transpose[T];d=c+S.(e-c);g=e+T.(f-e);weihuayan=Join[weihuayan,{zhengguojie[[i]],c,d,e,g,f,zhengguojie[[i+1]]}]];weihuayan]dongquanfa={{0,0},{1,0}};Show[Graphics[Line[Nest[lovelyduwangen,dongquanfa,1]],AspectRatio→Sqrt[3]/2]] Show[Graphics[Line[Nest[lovelyduwangen,dongquanfa,5]],AspectRatio→Sqrt[3]/2]] 基本生成元六、(*单个上正方*)lovelyduwangen[zhengguojie_List]:=Block[{weihuayan={},i, wuxiaonan=Length[zhengguojie],gengping=90Degree,sa=Sin[gengping],ca=Cos[gengping],c,d,d 1,g1,g,f,e,T={{ca,-sa},{sa,ca}},S},For[i=1,i< wuxiaonan,i++,c=zhengguojie[[i]]*2/3+zhengguojie[[i+1]]/3;e=zhengguojie[[i]]/3+zhengguojie[[i+1]]*2/3;S=Transpose[T];d=c+T.(e-c);d1=e+T.(e-c);weihuayan=Join[weihuayan,{zhengguojie[[i]],c,d,d1,e,zhengguojie[[i+1]]}]];weihuayan]dongquanfa={{0,0},{1,0}};Show[Graphics[Line[Nest[lovelyduwangen,dongquanfa,7]],AspectRatio→1/3]] Show[Graphics[Line[Nest[lovelyduwangen,dongquanfa,1]],AspectRatio→1/3]]基本生成元分形图七、(*一个正方形向外长大*)lovelyduwangen[zhengguojie_List]:=Block[{weihuayan={},i, wuxiaonan =Length[zhengguojie],gengping=90Degree,sa=Sin[gengping],ca=Cos[gengping],c,d,d 1,g1,g,f,e,T={{ca,-sa},{sa,ca}},S},For[i=1,i< wuxiaonan,i++,c=zhengguojie[[i]]*2/3+zhengguojie[[i+1]]/3;e=zhengguojie[[i]]/3+zhengguojie[[i+1]]*2/3;S=Transpose[T];d=c+T.(e-c);d1=e+T.(e-c);weihuayan=Join[weihuayan,{zhengguojie[[i]],c,d,d1,e,zhengguojie[[i+1]]}]];weihuayan]dongquanfa={{0,0},{1,0},{1,-1},{0,-1},{0,0}};Show[Graphics[Line[Nest[lovelyduwangen,dongquanfa,4]],AspectRatio→1/1]] Show[Graphics[Line[Nest[lovelyduwangen,dongquanfa,1]],AspectRatio→1/1]] 基本生成元分形图八、(*一个正方形向内长大*)lovelyduwangen[zhengguojie_List]:=Block[{weihuayan={},i, wuxiaonan =Length[zhengguojie],gengping=90Degree,sa=Sin[gengping],ca=Cos[gengping],c,d,d 1,g1,g,f,e,T={{ca,-sa},{sa,ca}},S},For[i=1,i< wuxiaonan,i++,c=zhengguojie[[i]]*2/3+zhengguojie[[i+1]]/3;e=zhengguojie[[i]]/3+zhengguojie[[i+1]]*2/3;S=Transpose[T];d=c+T.(e-c);d1=e+T.(e-c);weihuayan=Join[weihuayan,{zhengguojie[[i]],c,d,d1,e,zhengguojie[[i+1]]}]];weihuayan]dongquanfa={{0,0},{1,0},{1,1},{0,1},{0,0}};Show[Graphics[Line[Nest[lovelyduwangen,dongquanfa,5]],AspectRatio→1/1]] Show[Graphics[Line[Nest[lovelyduwangen,dongquanfa,1]],AspectRatio→1/1]]基本生成元分形图九、(*一个M形状图形*)lovelyduwangen[zhengguojie_List]:=Block[{weihuayan={},i, wuxiaonan =Length[zhengguojie],gengping=60Degree,sa=Sin[gengping],ca=Cos[gengping],c,d,g ,f,e,T={{ca,-sa},{sa,ca}},S},For[i=1,i< wuxiaonan,i++,c=zhengguojie[[i]]*3/4+zhengguojie[[i+1]]/4;e=zhengguojie[[i]]/2+zhengguojie[[i+1]]/2;f=zhengguojie[[i]]/4+zhengguojie[[i+1]]*3/4;S=Transpose[T];d=c+T.(e-c);g=e+T.(f-e);weihuayan=Join[weihuayan,{zhengguojie[[i]],c,d,e,g,f,zhengguojie[[i+1]]}]];weihuayan]dongquanfa={{0,0},{1,0}};Show[Graphics[Line[Nest[lovelyduwangen,dongquanfa,1]],AspectRatio→Sqrt[3]/8]] Show[Graphics[Line[Nest[lovelyduwangen,dongquanfa,5]],AspectRatio→Sqrt[3]/8]] 基本生成元十、两个上三角形横线lovelyduwangen[zhengguojie_List]:=Block[{weihuayan={},i, wuxiaonan =Length[zhengguojie],gengping=60Degree,sa=Sin[gengping],ca=Cos[gengping],c,d,g ,f,e,e1,T={{ca,-sa},{sa,ca}},S},For[i=1,i< wuxiaonan,i++,c=zhengguojie[[i]]*4/5+zhengguojie[[i+1]]/5;e=zhengguojie[[i]]*3/5+zhengguojie[[i+1]]*2/5;e1=zhengguojie[[i]]*2/5+zhengguojie[[i+1]]*3/5;f=zhengguojie[[i]]/5+zhengguojie[[i+1]]*4/5;S=Transpose[T];d=c+T.(e-c);g=e1+T.(f-e1);weihuayan=Join[weihuayan,{zhengguojie[[i]],c,d,e,e1,g,f,zhengguojie[[i+1]]}]];weihuayan]dongquanfa={{0,0},{1,0}};Show [ Graphics [ Line[Nest[lovelyduwangen,dongquanfa,1]] , AspectRatio→Sqrt[3]/10 ] ]Show [ Graphics [ Line[Nest[lovelyduwangen,dongquanfa,5]] , AspectRatio→Sqrt[3]/10 ] ]生成元分形图十一、上三角形横线下三角形lovelyduwangen[zhengguojie_List]:=Block[{weihuayan={},i, wuxiaonan =Length[zhengguojie],gengping=60Degree,sa=Sin[gengping],ca=Cos[gengping],c,d,g ,f,e,e1,T={{ca,-sa},{sa,ca}},S},For[i=1,i< wuxiaonan,i++,c=zhengguojie[[i]]*4/5+zhengguojie[[i+1]]/5;e=zhengguojie[[i]]*3/5+zhengguojie[[i+1]]*2/5;e1=zhengguojie[[i]]*2/5+zhengguojie[[i+1]]*3/5;f=zhengguojie[[i]]/5+zhengguojie[[i+1]]*4/5;S=Transpose[T];d=c+T.(e-c);g=e1+S.(f-e1);weihuayan=Join[weihuayan,{zhengguojie[[i]],c,d,e,e1,g,f,zhengguojie[[i+1]]}]];weihuayan]dongquanfa={{0,0},{1,0}};Show [ Graphics [ Line[Nest[lovelyduwangen,dongquanfa,1]] , AspectRatio→Sqrt[3]/5 ] ]Show [ Graphics [ Line[Nest[lovelyduwangen,dongquanfa,5]] , AspectRatio→Sqrt[3]/5 ] ]生成元分形图分形图基本图形以及源程序第二部分该程序写的太复杂的,至少看着程序段太多,在本文档系列第三部分我会给一个简单的程序实现它.注意,从word直接拷贝到mathematica,箭头会乱码,请自己改一改如这里的箭头AspectRatio→1/GoldenRatio一、挖空一个黑色三角形sierpinski[tris_List]:=Block[{tmp={},i,p=Length[tris]/3,a,b,c,d,e,f},For[i=0,i<p,i=i+1,a=tris[[3i+1]];b=tris[[3i+2]];c=tris[[3i+3]];d=(a+b)/2;e=(a+c)/2;f=(b+c)/2;tmp=Join[tmp,{a,d,e,d,b,f,e,f,c}]];tmp]Showsierpinski[pts_List]:=Block[{tmp={},i,p=Length[pts]/3},For[i=0,i<p,i=i+1,AppendTo[tmp,Polygon[{pts[[3i+1]],pts[[3i+2]],pts[[3i+3]]}]]];Show[Graphics[tmp],AspectRatio→1/GoldenRatio]]triangle={{-1,0},{1,0},{0,Sqrt[3]}}p0=Showsierpinski[Nest[sierpinski,triangle,0]]p1=Showsierpinski[Nest[sierpinski,triangle,1]]p2=Showsierpinski[Nest[sierpinski,triangle,2]]p3=Showsierpinski[Nest[sierpinski,triangle,3]]p4=Showsierpinski[Nest[sierpinski,triangle,4]]Show[GraphicsArray[{{p1,p2},{p3,p4}}]];生成元分形图二、挖空一个彩色的三角形sierpinski[tris_List]:=Block[{tmp={},i,p=Length[tris]/4,a,b,c,d,e,f},For[i=0,i<p,i=i+1,a=tris[[4i+1]];b=tris[[4i+2]];c=tris[[4i+3]];d=(a+b)/2;e=(a+c)/2;f=(b+c)/2;tmp=Join[tmp,{a,d,e,a,d,b,f,d,e,f,c,e}]];tmp]Showsierpinski[pts_List]:=Block[{tmp={},i,p=Length[pts]/4},For[i=0,i<p,i=i+1,(*AppendTo[tmp,{RGBColor[1,0,0],Polygon[{pts[[4i+1]],pts[[4i+ 2]],pts[[4i+3]]}]}],*)AppendTo[tmp,{Thickness[.02],RGBColor[0,0,1],Line[{pts[[4i+1]],pts[[4i+2]],pts[[4 i+3]],pts[[4i+1]]}]}]];Show[Graphics[tmp]]]Showsierp[pts_List]:=Block[{tmp={},i,p=Length[pts]/4},For[i=0,i<p,i=i+1,AppendTo[tmp,{RGBColor[1,0,0],Polygon[{pts[[4i+1]],pts[[4i+2]] ,pts[[4i+3]],pts[[4i+1]]}]}]];Show[Graphics[tmp]]]triangle={{-1,0},{1,0},{0,Sqrt[3]},{-1,0}}p0=Showsierpinski[Nest[sierpinski,triangle,2]]p1=Showsierp[Nest[sierpinski,triangle,2]]Show[{p0,p1}]生成元分形图三、第一题的逆,填充挖去的部分彩色swwwierpinski[wtris_List]:=Block[{tmp={},duu={},mm={{},{}},i,j,p=Length[wtris[ [1]]]/4,dd=Length[wtris[[2]]],a,b,c,d,e,f},For[j=1,j<dd+1,j=j+1,mm[[2]]=Join[mm[[2] ],{wtris[[2]][[j]]}]];For[i=0,i<p,i=i+1,a=wtris[[1]][[4i+1]];b=wtris[[1]][[4i+2]];c=wtris[[1]][[4i+3]];d=(a+b)/2;e=(a+c)/2;f=(b+c)/2;mm[[1]]=Join[mm[[1]],{a,d,e,a,d,b,f,d,e,f,c,e}];mm[[2]]=Join[mm[[2]],{d,e,f,d}]];mm]Shwwowsierp[pts_List]:=Block[{tmp={},i,p=Length[pts[[2]]]/4},For[i=0,i<p,i=i+1,A ppendTo[tmp,{RGBColor[1,0,0],Polygon[{pts[[2]][[4i+1]],pts[[2]][[4i+2]],pts[[2]][[4 i+3]],pts[[2]][[4i+4]]}]}]];Show[Graphics[tmp]]]triangle={{{-1,0},{1,0},{0,Sqrt[3]},{-1,0}},{}};p9=Shwwowsierp[Nest[swwwierpinski,triangle,4]]p22=Shwwowsierp[Nest[swwwierpinski,triangle,4]]生成元分形图四、第一题的逆,填充挖去的部分黑白swwwierpinski[wtris_List]:=Block[{tmp={},duu={},mm={{},{}},i,j,p=Length[wtris[ [1]]]/4,dd=Length[wtris[[2]]],a,b,c,d,e,f},For[j=1,j<dd+1,j=j+1,mm[[2]]=Join[mm[[2] ],{wtris[[2]][[j]]}]];For[i=0,i<p,i=i+1,a=wtris[[1]][[4i+1]];b=wtris[[1]][[4i+2]];c=wtris[[1]][[4i+3]];d=(a+b)/2;e=(a+c)/2;f=(b+c)/2;mm[[1]]=Join[mm[[1]],{a,d,e,a,d,b,f,d,e,f,c,e}];mm[[2]]=Join[mm[[2]],{d,e,f,d}]];mm]Shwwowsierp[pts_List]:=Block[{tmp={},i,p=Length[pts[[2]]]/4},For[i=0,i<p,i=i+1,A ppendTo[tmp,{Polygon[{pts[[2]][[4i+1]],pts[[2]][[4i+2]],pts[[2]][[4i+3]],pts[[2]][[4i+ 4]]}]}]];Show[Graphics[tmp]]]triangle={{{-1,0},{1,0},{0,Sqrt[3]},{-1,0}},{}};p9=Shwwowsierp[Nest[swwwierpinski,triangle,5]]生成元除了颜色之外其他同上分形图。