skspatial.objects.Circle.intersect_line

Circle.intersect_line(line: skspatial.objects.line.Line) Tuple[skspatial.objects.point.Point, skspatial.objects.point.Point][source]

Intersect the circle with a line.

A line intersects a circle at two points.

Parameters
lineLine

Input line.

Returns
point_a, point_bPoint

The two points of intersection.

Raises
ValueError

If the line does not intersect the circle.

References

http://mathworld.wolfram.com/Circle-LineIntersection.html

Examples

>>> from skspatial.objects import Circle, Line
>>> circle = Circle([0, 0], 1)
>>> circle.intersect_line(Line(point=[0, 0], direction=[1, 0]))
(Point([-1.,  0.]), Point([1., 0.]))
>>> point_a, point_b = circle.intersect_line(Line(point=[0, 0], direction=[1, 1]))
>>> point_a.round(3)
Point([-0.707, -0.707])
>>> point_b.round(3)
Point([0.707, 0.707])
>>> circle.intersect_line(Line(point=[1, 2], direction=[1, 1]))
(Point([-1.,  0.]), Point([0., 1.]))

If the line is tangent to the circle, the two intersection points are the same.

>>> circle.intersect_line(Line(point=[1, 0], direction=[0, 1]))
(Point([1., 0.]), Point([1., 0.]))

The circle does not have to be centered on the origin.

>>> point_a, point_b = Circle([2, 3], 5).intersect_line(Line([1, 1], [2, 3]))
>>> point_a.round(3)
Point([-0.538, -1.308])
>>> point_b.round(3)
Point([5., 7.])
>>> circle.intersect_line(Line(point=[5, 0], direction=[1, 1]))
Traceback (most recent call last):
...
ValueError: The line does not intersect the circle.