<p>使用<a href="https://stackoverflow.com/questions/849211/shortest-distance-between-a-point-and-a-line-segment">Shortest distance between a point and a line segment</a>中的<code>dist</code>函数</p>
<pre><code>import math
def dist(p1, p2, c):
x1,y1 = p1
x2,y2 = p2
x3,y3 = c
px = x2-x1
py = y2-y1
something = px*px + py*py
u = ((x3 - x1) * px + (y3 - y1) * py) / float(something)
if u > 1:
u = 1
elif u < 0:
u = 0
x = x1 + u * px
y = y1 + u * py
dx = x - x3
dy = y - y3
dist = math.sqrt(dx*dx + dy*dy)
return dist
</code></pre>
<p>下面是一个测试:</p>
<pre><code>rect = [[0. , 0. ],
[ 0.2, 1. ],
[ 2.2, 0.6],
[ 2. , -0.4]]
c = 0.5, 2.0
r = 1.0
distances = [dist(rect[i], rect[j], c) for i, j in zip([0, 1, 2, 3], [1, 2, 3, 0])]
print distances
print any(d < r for d in distances)
</code></pre>
<p>输出:</p>
<pre><code>[1.044030650891055, 1.0394155162323753, 2.202271554554524, 2.0592194189509323]
False
</code></pre>
<p>下面是情节:</p>
<p><img src="https://i.stack.imgur.com/r493O.png" alt="enter image description here"/></p>