ふと思いついたのでやってよう。
タートルを使って円周率を求めてみる。
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」。おお、それなりの値が。
頂点数による精度の変化
一辺の長さは変えずに頂点数を増やして精度を見てみよう。
頂点数 | 周長 | 直径 | 円周率 |
---|---|---|---|
360 | 360 | 114.5886459 | 3.1416725 |
3600 | 3600 | 1145.9147949 | 3.1415948 |
36000 | 36000 | 11459.1699219 | 3.1415888 |
360000 | 36000 | 114593.7734375 | 3.1415319 |
36000 角形になると、3600 角形の時より精度が落ちてしまった。3600 角形あたりが一番精度がよいみたい。あまり大きいと turn する角度の値が小さくなり過ぎて精度が落ちるのか?
辺長による精度の変化
一辺の値を大きくしてみよう。「SCALE = 10」。
頂点数 | 周長 | 直径 | 円周率 |
---|---|---|---|
360 | 3600 | 1145.8865967 | 3.1416721 |
3600 | 36000 | 1145.9147949 | 3.1415928 |
36000 | 360000 | 114591.6640625 | 3.1415898 |
360000 | 3600000 | 1145972 | 3.141438 |
やはり3600 角形あたりが一番精度がよいみたいだ。
0 件のコメント:
コメントを投稿