Немного опоздал с ответом, но моя программа трассировки оптических лучей python pvtrace делает именно это. Это будет работать так:
1) Определите полигон со списком точек и создайте объект Polygon
points = [[0,0,0],[0,0.1,0],[0.1,0.1,-0.03],[0.1,0,-0.03]]
polygon = Polygon(points)
2) Получить точку (и) пересечения с объектом Луч
ray = Ray(position=(0,0,0), direction=(0,0,1))
print polygon.intersection(ray)