円周率って円の何かを求めるときに必ず使いますよね。
面積=半径×半径×円周率
円周=直径×円周率
でも円って数式で表すと
x^2+y^2=1
∵sin^2θ+cos^2θ=1
となるので
y=± \sqrt{1-x^2}
となりますので、例えばですが第一象限のデータ数を100個にして式に当てはめればいい感じに二次曲線になります。
面積から円周率を求める
これを使って積分すれば円の面積の4分の1が求まりますから、つまり第一象限の面積の4倍が円の面積と理論上近似できるという訳です。
実際にやってみましょう。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 1, 100)
y = np.sqrt(1-x**2)
plt.plot(x, y)
plt.plot(x, -y)
plt.plot(-x, y)
plt.plot(-x, -y)
plt.show()
total = 0
for i in range(len(x)-1):
total = total + (x[i+1] - x[i]) * (y[i+1] + y[i]) / 2
print(total*4)
もう円と似たようなもんですよね。
しかし値はこうなりました。
3.1403991781146154
円周率は3.14159265(自分が覚えている範囲)なので最初3桁は合っていますが、意外と400セグメントだけでは足りないのかもしれませんね。
ピタゴラスの定理を使うと
そもそも円周率って単位円の半円の円周って考えたらピタゴラスの定理を使って長さを計算した方が正確かもしれません。
total = 0
for i in range(len(x)-1):
total = total + np.sqrt((x[i+1] - x[i])**2 + (y[i+1] - y[i])**2)
print(total*2)
出力結果は3.141294099131327で4桁まで合っていました。
まとめ
円周率はそもそも円周の長さなのでそりゃピタゴラスの定理使った方が良いよね。