Pi (π) gerçek güzelliğin matematiksel halidir. Birçok denklemde karşımıza çıkar. Özellikle de dairesel hesaplar yaparken, çan eğrisi hesaplarken ve son olarak da, inanılmaz bir şekilde, Euler Özdeşliği'nde.

Peki π değerinin 3.14159265359... olduğunu nereden bliyoruz? Pi sayısını hesaplamanın birçok yöntemi var. Bu egzersiz ile pi sayısını dart tahtasını kullanarak hesaplamayı öğreneceğiz.


Bu arkadaşın adı da Pi. Ama bu problem onunla alakasız (ismi dışında).

Aşağıdaki (sol) sarı daireye bir dart oku attığınızı hayal edin. Eğer rastgele bir şekilde birçok ok atarsanız, bazıları sarı bölgenin içine bazıları da dışarıdaki gri alana isabet edecektir. Eğer hem içerideki daireye hem de dışarıdaki kareye denk gelen okları sayacak olursanız, bu toplamların oranı iki şeklin alanları oranına eşit olmalıdır.

Dairenin alanı π ve karenin alanı 4 olduğuna göre, dairenin içine isabet eden okların oranı π / 4 civarında olmalıdır.

Çözüm

"""
File: find_pi.py
--------------------
Find the value of pi by throwing random darts at a unit circle inscribed in
a square. The fraction that land in the circle should equal pi / 4.
"""

# Needed to generate random numbers
import random

# Needed for sqrt
import math

# The number of darts to throw
NUM_DARTS = 20000000


def main():
    print("This program takes a bit of time to run - thanks for your patience!")

    num_in_circle = 0
    for i in range(NUM_DARTS):
        """
        get a random x and y coordinate between (-1, -1) and (1, 1)
        (imagine the center of the circle is (0, 0))
        """
        x = random.uniform(-1, 1)
        y = random.uniform(-1, 1)

        """
        test if the dart landed in the circle by calculating the length
        of the hypotenuse of the triangle created at this point.
        The radius of the circle is 1, so if the distance is more than 1
        it is outside the circle.
        """
        dist = math.sqrt(x * x + y * y)
        if dist <= 1:
            num_in_circle += 1

    # Approximate pi
    fraction = num_in_circle / NUM_DARTS
    pi = fraction * 4
    print(pi)


if __name__ == '__main__':
    main()