2012年7月29日日曜日

[ドリトル] 円周率を求める

ふと思いついたのでやってよう。
タートルを使って円周率を求めてみる。
forward と rightturn で円を描けば周長がわかるので、「周長=直径×PI」より半円を描いた時の座標から円周率がわかる。

SCALE = 1.
APEX = 360.

t1 = Turtle!create hide.
[t1 ! (SCALE) forward (360.0/APEX) leftturn ] ! (APEX/2) repeat.

TextField ! (SCALE*APEX) create.
TextField ! (t1 ! yPosition?) create nextline.
TextField ! ((SCALE*APEX) / (t1 ! yPosition?)) create nextline.

「円周率=3.1416725」。おお、それなりの値が。



頂点数による精度の変化

一辺の長さは変えずに頂点数を増やして精度を見てみよう。

頂点数周長直径円周率
360360114.58864593.1416725
360036001145.91479493.1415948
360003600011459.16992193.1415888
36000036000114593.77343753.1415319

36000 角形になると、3600 角形の時より精度が落ちてしまった。3600 角形あたりが一番精度がよいみたい。あまり大きいと turn する角度の値が小さくなり過ぎて精度が落ちるのか?



辺長による精度の変化

一辺の値を大きくしてみよう。「SCALE = 10」。

頂点数周長直径円周率
36036001145.88659673.1416721
3600360001145.91479493.1415928
36000360000114591.66406253.1415898
360000360000011459723.141438

やはり3600 角形あたりが一番精度がよいみたいだ。



0 件のコメント:

コメントを投稿