Stats

Popular Posts

Followers

Mathematica 教學 Pythagorean trees

戴忠淵 於 2010年6月5日星期六 上午7:05 發表



碎形裡的一個例子,重覆利用畢氏定理斜邊平方為其餘兩邊的平方所得之圖形

newpt[S_List,A_List,B_List,T_List]:=newpt[S,A,B,T]=Block[{temp1,temp2,tm,x},
tm[xx_]={{Cos[xx],Sin[xx]},{-Sin[xx],Cos[xx]}};
x=Pi/3;
temp1=Cos[x]*(B-A);
temp2=-Sin[x]*(B-A);
{{A,A+temp1.tm[x+Pi/2],A+Sqrt[2]*temp1.tm[x+Pi/4],
A+temp1.tm[x]},
{B+temp2.tm[x-Pi/2],B+Sqrt[2]*temp2.tm[x-Pi/2-Pi/4],
B+temp2.tm[x-Pi/2-Pi/2],B}}
]

data={{0,0},{0,1},{1,1},{1,0}};

Graphics[Map[{RGBColor[Random[], Random[], Random[]], Polygon[#]} &, Flatten[NestList[Flatten[newpt @@@ #, 1] &, {data}, 6], 1]]]


接下來將上面的模式一般話,不要求一定要直角三角形

newpt[S_List,A_List,B_List,T_List]:=Block[{temp1,temp2,tm,a,b},
Compile->True;
tm[xx_]:={{Cos[xx],Sin[xx]},{-Sin[xx],Cos[xx]}};
b=Sin[x1]/Sin[Pi-x1-x2];
a=Sin[x2]/Sin[Pi-x1-x2];
temp1=a*(B-A);
temp2=-b*(B-A);
{{A,A+temp1.tm[x1+Pi/2],A+Sqrt[2]*temp1.tm[x1+Pi/4],
A+temp1.tm[x1]},
{B+temp2.tm[-x2],B+Sqrt[2]*temp2.tm[-x2-Pi/4],
B+temp2.tm[-x2-Pi/2],B}}
]

(*三角形的兩角*)
x1=Pi/6;
x2=Pi/6;

Graphics[Map[{RGBColor[Random[],Random[],Random[]], Polygon[#]}&, Flatten[NestList[Flatten[newpt@@@#, 1]&,{data},6],1]]]


x1=Pi/12;
x2=Pi/4;
 
Tags: ,

讀者回應 ( 0 意見 )

發佈留言

Please leave your name and tell me what you thought about this site. Comments, suggestions and views are welcomed.

如果這篇文章對你有幫助,那請留個訊息給我~