import random
random.seed(42) #reproducible results
def rp():
"""Choose a random point uniformly in the unit circle"""
while True:
x = random.uniform(-1, 1)
y = random.uniform(-1, 1)
if x*x + y*y < 1:
return (x, y)
def ccw(a, b):
"""Compute a 2x2 determinant to decide orientation of angle between
two points as seen from the origin."""
return a[0]*b[1] - a[1]*b[0]
containsCenter = 0
areaWithCenter = 0
numTotal = 250000 # higher means more time but more precision as well
for i in xrange(numTotal):
p1 = rp()
p2 = rp()
p3 = rp()
c12 = ccw(p1, p2)
c23 = ccw(p2, p3)
c31 = ccw(p3, p1)
if c12*c23 > 0 and c23*c31 > 0 and c31*c12 > 0:
containsCenter += 1
areaWithCenter += abs(c12*c23*c31) # shoelace formula
areaWithCenter = areaWithCenter/containsCenter
containsCenter = float(containsCenter)/numTotal
print(containsCenter)
print(areaWithCenter)
aW1wb3J0IHJhbmRvbQpyYW5kb20uc2VlZCg0MikgI3JlcHJvZHVjaWJsZSByZXN1bHRzCgpkZWYgcnAoKToKICAgICIiIkNob29zZSBhIHJhbmRvbSBwb2ludCB1bmlmb3JtbHkgaW4gdGhlIHVuaXQgY2lyY2xlIiIiCiAgICB3aGlsZSBUcnVlOgogICAgICAgIHggPSByYW5kb20udW5pZm9ybSgtMSwgMSkKICAgICAgICB5ID0gcmFuZG9tLnVuaWZvcm0oLTEsIDEpCiAgICAgICAgaWYgeCp4ICsgeSp5IDwgMToKICAgICAgICAgICAgcmV0dXJuICh4LCB5KQoKZGVmIGNjdyhhLCBiKToKICAgICIiIkNvbXB1dGUgYSAyeDIgZGV0ZXJtaW5hbnQgdG8gZGVjaWRlIG9yaWVudGF0aW9uIG9mIGFuZ2xlIGJldHdlZW4KICAgICAgIHR3byBwb2ludHMgYXMgc2VlbiBmcm9tIHRoZSBvcmlnaW4uIiIiCiAgICByZXR1cm4gYVswXSpiWzFdIC0gYVsxXSpiWzBdCgpjb250YWluc0NlbnRlciA9IDAKYXJlYVdpdGhDZW50ZXIgPSAwCm51bVRvdGFsID0gMjUwMDAwICMgaGlnaGVyIG1lYW5zIG1vcmUgdGltZSBidXQgbW9yZSBwcmVjaXNpb24gYXMgd2VsbApmb3IgaSBpbiB4cmFuZ2UobnVtVG90YWwpOgogICAgcDEgPSBycCgpCiAgICBwMiA9IHJwKCkKICAgIHAzID0gcnAoKQogICAgYzEyID0gY2N3KHAxLCBwMikKICAgIGMyMyA9IGNjdyhwMiwgcDMpCiAgICBjMzEgPSBjY3cocDMsIHAxKQogICAgaWYgYzEyKmMyMyA+IDAgYW5kIGMyMypjMzEgPiAwIGFuZCBjMzEqYzEyID4gMDoKICAgICAgICBjb250YWluc0NlbnRlciArPSAxCiAgICAgICAgYXJlYVdpdGhDZW50ZXIgKz0gYWJzKGMxMipjMjMqYzMxKSAjIHNob2VsYWNlIGZvcm11bGEKCmFyZWFXaXRoQ2VudGVyID0gYXJlYVdpdGhDZW50ZXIvY29udGFpbnNDZW50ZXIKY29udGFpbnNDZW50ZXIgPSBmbG9hdChjb250YWluc0NlbnRlcikvbnVtVG90YWwKcHJpbnQoY29udGFpbnNDZW50ZXIpCnByaW50KGFyZWFXaXRoQ2VudGVyKQo=