我想也许您的问题是理论上如何以最快的方式做到这一点。但是,如果您想快速执行此操作,则应真正使用以C / C ++编写的内容。
我已经习惯了Shapely,所以我将提供一个如何使用此库的示例。有许多用于python的几何库。我将在此答案的结尾列出它们。
from shapely.geometry import LineString
from shapely.geometry import Point
p = Point(5,5)
c = p.buffer(3).boundary
l = LineString([(0,0), (10, 10)])
i = c.intersection(l)
print i.geoms[0].coords[0]
(2.8786796564403576, 2.8786796564403576)
print i.geoms[1].coords[0]
(7.121320343559642, 7.121320343559642)
在Shapely中有点反直觉的是,圆是具有缓冲区的点的边界。这就是为什么我这样做p.buffer(3).boundry
交集i
也是一个几何形状的列表,在这种情况下它们都是点,这就是为什么我必须从中获得它们的原因i.geoms[]
还有另一个Stackoverflow问题,针对那些感兴趣的人来介绍有关这些库的详细信息。
编辑,因为评论:
Shapely基于GEOS(trac.osgeo.org/geos),它是用C++构建的,并且比您用python本地编写的任何东西都要快得多。SymPy似乎基于mpmath(mpmath.org),后者也似乎是python,但似乎其中集成了许多非常复杂的数学。实现自己可能需要大量工作,并且可能不会像GEOS C ++实现那样快。