#!/usr/bin/python3
from math import sin, cos, atan2, pi
import random
rnd = random.Random(1)
def rndpt(a):
while True:
x = rnd.uniform(-1, 1)
y = rnd.uniform(-1, 1)
if x*x + y*y > 1:
continue
ang = atan2(y, x)
if ang < 0:
ang += 2*pi
if ang > a:
continue
return (x, y)
def trial(a, rep=10000):
asum = 0
for iteration in range(rep):
x1, y1 = rndpt(a)
x2, y2 = rndpt(a)
asum += abs(x1*y2 - x2*y1)
return (asum/rep/2, (4*(a-sin(a)))/(9*a*a))
for n in range(1, 8):
r, c = trial(2*pi/n)
print("2*pi/{}: {:+.6f} = {:.6f} - {:.6f}".format(n, r-c, r, c))
IyEvdXNyL2Jpbi9weXRob24zCgpmcm9tIG1hdGggaW1wb3J0IHNpbiwgY29zLCBhdGFuMiwgcGkKaW1wb3J0IHJhbmRvbQoKcm5kID0gcmFuZG9tLlJhbmRvbSgxKQoKZGVmIHJuZHB0KGEpOgogICAgd2hpbGUgVHJ1ZToKICAgICAgICB4ID0gcm5kLnVuaWZvcm0oLTEsIDEpCiAgICAgICAgeSA9IHJuZC51bmlmb3JtKC0xLCAxKQogICAgICAgIGlmIHgqeCArIHkqeSA+IDE6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgYW5nID0gYXRhbjIoeSwgeCkKICAgICAgICBpZiBhbmcgPCAwOgogICAgICAgICAgICBhbmcgKz0gMipwaQogICAgICAgIGlmIGFuZyA+IGE6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgcmV0dXJuICh4LCB5KQoKZGVmIHRyaWFsKGEsIHJlcD0xMDAwMCk6CiAgICBhc3VtID0gMAogICAgZm9yIGl0ZXJhdGlvbiBpbiByYW5nZShyZXApOgogICAgICAgIHgxLCB5MSA9IHJuZHB0KGEpCiAgICAgICAgeDIsIHkyID0gcm5kcHQoYSkKICAgICAgICBhc3VtICs9IGFicyh4MSp5MiAtIHgyKnkxKQogICAgcmV0dXJuIChhc3VtL3JlcC8yLCAoNCooYS1zaW4oYSkpKS8oOSphKmEpKQoKZm9yIG4gaW4gcmFuZ2UoMSwgOCk6CiAgICByLCBjID0gdHJpYWwoMipwaS9uKQogICAgcHJpbnQoIjIqcGkve306IHs6Ky42Zn0gPSB7Oi42Zn0gLSB7Oi42Zn0iLmZvcm1hdChuLCByLWMsIHIsIGMpKQo=