<p>我想也许你的问题是理论上如何以最快的方式来做这件事。但是如果你想快速地做这件事,你应该使用C/C++编写的东西。</p>
<p>我已经习惯了<a href="http://toblerity.org/shapely/manual.html" rel="noreferrer">Shapely</a>,所以我将提供一个如何使用这个库的示例。python有许多几何库。我将在这个答案的末尾列出它们。</p>
<pre><code>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)
</code></pre>
<p>在Shapely中有点反直觉的是,圆是具有缓冲区的点的边界。这就是我为什么要<code>p.buffer(3).boundry</code></p>
<p>交集<code>i</code>也是一个几何图形列表,在本例中这两个图形都是点,这就是为什么我必须从<code>i.geoms[]</code>中获取这两个图形</p>
<p>这里有<a href="https://stackoverflow.com/questions/1076778/good-geometry-library-in-python">another Stackoverflow question</a>为感兴趣的人详细介绍了这些库。</p>
<ul>
<li><a href="http://www.sympy.org/en/index.html" rel="noreferrer">SymPy</a></li>
<li><a href="http://cgal-python.gforge.inria.fr/" rel="noreferrer">CGAL Python bindings</a></li>
<li><a href="http://code.google.com/p/pyeuclid/" rel="noreferrer">PyEuclid</a></li>
<li><a href="http://www.pythonocc.org/" rel="noreferrer">PythonOCC</a></li>
<li><a href="http://code.google.com/p/geometry-simple/" rel="noreferrer">Geometry-simple</a></li>
</ul>
<p>编辑,因为注释:</p>
<P> Shaffy是基于GEOS(Trac.OsGeo.org/GeOS)的,它是用C++构建的,比在Python中自己编写的任何东西都快得多。SymPy似乎是基于mpmath(mpmath.org)的,它看起来也是python,但是似乎集成了很多非常复杂的数学。实现自己可能需要大量的工作,并且可能不会像GeOS C++实现那样快。</p>