Симпатичное пустое пересечение в коде, но работает, если объявить явно

#python #sympy

Вопрос:

В коде я пытаюсь получить пересечение линии и многоугольника, но оно показывает пустое пересечение.

 #code snippet
#rot val is -1.2476679904445084e-10
from sympy import Point,Line, Polygon
L = Line(Point(h//2,w//2),slope = math.tan(math.radians(90 - rot_val)))
h,w,c = im.shape
p = Polygon((0,0),(0,w-1),(h-1,w-1),(h-1,0))
print("Line is",end = " ")
print(L)
print("Polygon is",end = " ")
print(p)
print("intersection is",end = " ")
print(p.intersection(L))
intersection = p.intersection(L)
 

Выход:

 Line is Line2D(Point2D(466, 838), Point2D(467, -459189054634.429))
Polygon is Polygon(Point2D(0, 0), Point2D(0, 1675), Point2D(931, 1675), Point2D(931, 0))
intersection is []
 

Но если я запущу этот код,

 p = Polygon(Point2D(0, 0), Point2D(0, 1675), Point2D(931, 1675), Point2D(931, 0))
l = Line2D(Point2D(466, 838), Point2D(467, -459189054634.429))
print(l.intersection(p))
 

Я нахожу правильное пересечение.

Комментарии:

1. Пожалуйста, вставьте код, а не изображение кода

2. Надеюсь, теперь это ясно.

3. Вы используете h и w до того, как они получат свою ценность. Кроме того, вы должны быть очень осторожны с math функциями внутри sympy. Для символических вычислений следует использовать эквиваленты sympy.