Pi-mit-Dielenbretter.py
import random;
from math import sin,cos;
from geometry2d import pi,Points,Vectors,Lines,Segments;

# Dielengerade, hier einfach die x-Achse
floorLine=Lines.toLineWithDir(Points(0,0),Vectors(1,0));

random.seed();

# Wurf der Nadel
def needlePitch() -> bool:
    yNdM=random.uniform(-0.5,0.5);
    # Zufällige Lage der geworfenen Nadel auf der y-Achse
    # im Intervall (-½,½)

    PtNdM=Points(0.0,yNdM);
    # Punkt der Nadelmitte auf der Diele

    phiNd=random.uniform(-pi/2,pi/2);
    # Zufällige Orientierung der Nadel auf der Diele
    # im Intervall (-π/2,π/2)

    DvNd=Vectors(sin(phiNd),cos(phiNd));
    # Richtungsvektor der Nadel auf der Diele

    needle=Segments.toSegmentWithDir(PtNdM,DvNd,1);
    # Erzeugung des Segments (Strecke) aus der Nadelmitte,
    # dem Richtungsvektor und der Nadellänge 1

    return needle.isIntersectionOf_withLine(floorLine);
    # Test, ob die Strecke die Gerade schneidet

# end def needlePitch

# ------------------------------------------------------------------------------#
# ------------------------------------------------------------------------------#

if __name__=='__main__':
    print('\n# Beginning Pi-mit-Dielenbretter ...\n');

    # ------------------------------------------------------------------------------#
    # ------------------------------------------------------------------------------#

    total=2000000; # Standardwert 2000000
    # Anzahl der Würfe
    crossed=0;
    # Nadel überkreuzt die Dielengerade

    total_10=total/10;
    k=1;

    for ix in range(1,total+1,1):
        if ix==k*total_10:
            print(k)
            k=k+1;
        if needlePitch(): crossed+=1;
    # end for

    result: float=crossed/total;
    # Wahrscheinlichkeit für die Überkreuzung

    print("\nNb of Pitches : ",total);
    print("crossed       : ",crossed);
    print("Result Prop   : ",result);
    print("Result Prop % : ",result*100," %");
    print("|Result-2/pi| : ",abs(result-2.0/pi));

    # ------------------------------------------------------------------------------#
    # ------------------------------------------------------------------------------#
    print('\n# Finished Pi-mit-Dielenbretter.\n');
# end if main