Я до сих пор не знаю, почему мой предыдущий метод не сработал, но я знаю тот, который будет. После возни в Wolfram | Alpha я понял координаты пересечения, где все иррационально. Видя, что результаты программы были дробными, что-то было явно не так. Оказывается, радиус круга, 0,8, вызвал все неприятности.
Вместо того, чтобы приводить число с плавающей точкой в качестве аргумента, вам нужно сначала его прояснить. Важно помнить две вещи:
- Аргумент должен быть строкой, а не плавающей точкой.
- Флаг «рациональный» должен быть истинным.
Учитывая это, новый код становится:
from sympy import sympify
from sympy.geometry import Point2D, Segment2D, Circle
# Point A, B and C
A = Point2D(1, 1)
B = Point2D(3, -1)
C = Point2D(-2, -2)
# Segment from A to B
f_0 = Segment2D(A, B)
# Segment from A to C
f_1 = Segment2D(A, C)
# Circle with center A and radius 0.8
c = Circle(A, sympify('.8', rational=True))
i_0 = c.intersection(f_0)
i_1 = c.intersection(f_1)
print(i_0)
print(i_1)
Затем получается:
[Point2D(2*sqrt(2)/5 + 1, -2*sqrt(2)/5 + 1)]
[Point2D(-2*sqrt(2)/5 + 1, -2*sqrt(2)/5 + 1)]