円周率問題
円周率を 3 で計算すると,円じゃなくて六角形と考えることになる,という話がありますが,では 3.14 とすると何角形と考えることになるのでしょうか。C言語を使って計算してください。 力技だとこんな感じ?
code:pi.rb
pi = Math.atan(1) * 4
(4..10000).each { |n|
theta = 2.0 * pi / n
l = Math.sqrt(1 + 1 - 2 * Math.cos(theta))
puts "#{n} #{l * n / 2.0}" }
余弦定理ナシではできないか?
https://gyazo.com/db757eef804296affd5d6802cf191c74
ABがわかればOBもBCもわかるからACもわかる
∠AOC = 30゜のとき
AC = 1.0
12角形を考える
AB = AC / 2.0 OB = Math.sqrt(1.0**2-AB**2) BC = 1-OB AC = Math.sqrt(AB**2+BC**2)
AC * 12 / 2.0
24角形
AB = AC / 2.0 OB = Math.sqrt(1.0**2-AB**2) BC = 1-OB AC = Math.sqrt(AB**2+BC**2)
AC * 24 / 2.0
48角形
AB = AC / 2.0 OB = Math.sqrt(1.0**2-AB**2) BC = 1-OB AC = Math.sqrt(AB**2+BC**2)
AC * 48 / 2.0 まだだめか
96角形
AB = AC / 2.0 OB = Math.sqrt(1.0**2-AB**2) BC = 1-OB AC = Math.sqrt(AB**2+BC**2)
AC * 96 / 2.0 3.14になった!
192角形
AB = AC / 2.0 OB = Math.sqrt(1.0**2-AB**2) BC = 1-OB AC = Math.sqrt(AB**2+BC**2)
AC * 192 / 2.0 3.14145
4角形からはじめたら64角形ぐらいで3.14になりそう
AC = Math.sqrt(2.0)
8角形
AB=AC / 2.0 OB = Math.sqrt(1.0**2-AB**2) BC = 1-OB AC = Math.sqrt(AB**2+BC**2)
AC * 8 / 2.0
16角形
AB=AC / 2.0 OB = Math.sqrt(1.0**2-AB**2) BC = 1-OB AC = Math.sqrt(AB**2+BC**2)
AC * 16 / 2.0
32角形
AB=AC / 2.0 OB = Math.sqrt(1.0**2-AB**2) BC = 1-OB AC = Math.sqrt(AB**2+BC**2)
AC * 32 / 2.0 3.1365
64角形
AB=AC / 2.0 OB = Math.sqrt(1.0**2-AB**2) BC = 1-OB AC = Math.sqrt(AB**2+BC**2)
AC * 64 / 2.0 3.14033
ということで、48以上64以下ということはわかる