Python - 获取线条周围区域的坐标

4
我有我的坐标保存在numpy数组x和y中。 现在我只想得到一个多边形(分别是点的数组),它定义了给定宽度参数的周围区域。
我的问题是,我需要一个没有交叉的多边形。但当存在一个狭窄的曲线时,这种情况确实会发生。对于我的应用程序,最好识别这些点并省略它们。有没有一种简单的方法来找到这些点?
到目前为止,我已经:
# x contains x coords
# y contains y coords
# angle contains the current moving direction (radian)
import numpy as np

phi = np.pi/2 + angle
x_left = x + dist*np.cos( phi )
y_left = y + dist*np.sin( phi )

x_right = x - dist*np.cos( phi )
y_right = y - dist*np.sin( phi )

x_total = hstack((x_left, x_right[::-1]))
y_total = hstack((y_left, y_right[::-1]))        

##----- Omit Points with minimal dist < threshold to ANY point on traj
x_res = []
y_res = []
for idx in range(len(x_total)):
    m = np.min( np.sqrt( (x-x_total[idx])**2 + (y-y_total[idx])**2) )
    if m > dist-epsilon:
        x_res.append( x_total[idx] )
        y_res.append( y_total[idx] )    
points = np.vstack( (x_res, y_res) ).T

现在,“points”包含了围绕所需距离的coord.-line的多边形。然而,多边形中仍然可能存在一些交叉点。我试图通过插值(例如使用scipy.interpolate.spline)来消除它们。但是我无法使其正常工作。
有人可以帮忙吗?=)

1
看一下 shapely 库,它应该可以满足你的需求。 - Ivan
我尝试了使用Shapely,但结果基本相同: “同样地,Shapely无法防止创建无效要素,但在对其进行操作时会引发异常。”请参见http://toblerity.org/shapely/manual.html#polygons我找不到一种方法将这个无效的多边形转换为有效的。 - T_W
你的库里有“偏移量”功能吗?你可以将整行向两侧偏移,然后将它们的点放入一个数组中。 - Daniel Möller
1个回答

4

Shapely已经起作用:

import shapely.geometry as shgeo
line = vstack( (x,y) ).T
line = shgeo.LineString( line )
surrounding_polygon = line.buffer( 10,cap_style=3 ) # 10=Dist

谢谢你的提示;)

1
你可以考虑将自己的答案标记为“已回答”,这样其他看到这个问题的人也会知道答案。 - Daniel Möller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接