擅长:python、mysql、java
<p>下面是一个快速而肮脏的插值示例:</p>
<pre><code>def y_on_line(x, pos1, pos2):
if(x < min(pos1[0], pos2[0])) or (x > max(pos1[0], pos2[0])):
return None
else:
if(pos1[0] == pos2[0]):
return pos1[1]
else:
return pos1[1] + (pos2[1] - pos1[1]) * (x - pos1[0]) / (pos2[0] - pos1[0])
def min_max_y(x, array):
miny = None
maxy = None
for i in range(len(array)):
y = y_on_line(x, array[i], array[(i+1)%len(array)])
if(y is None):
continue
if(y < miny) or (miny is None):
miny = y
if(y > maxy) or (maxy is None):
maxy = y
return [miny, maxy]
print min_max_y(0.5, [[0,0],[0,2],[1,1]])
output: [0.5,1.5]
</code></pre>
<p>请注意,如果多边形是凹的,那么<code>(x, miny)</code>-<code>(x,maxy)</code>都包含在其中,以防重要。在</p>