python點到線段的最小距離

2021-10-04 15:06:44 字數 1208 閱讀 6973

點到線段的距離,如果點到直線的垂足位於線段中,則垂足就是所求距離;否則求點到線段端點的距離,作為所求距離

求點到線段的垂足:

#計算點到線的垂足def getfootpoint(point, line_p1, line_p2):"""

@point, line_p1, line_p2 : [x, y, z]

"""x0 = point[0]

y0 = point[1]

z0 = 0#point[2]

x1 = line_p1[0]

y1 = line_p1[1]

z1 = 0#line_p1[2]

x2 = line_p2[0]

y2 = line_p2[1]

z2 = 0#line_p2[2]

k = -((x1 - x0) * (x2 - x1) + (y1 - y0) * (y2 - y1) + (z1 - z0) * (z2 - z1)) / \

((x2 - x1) ** 2 + (y2 - y1) ** 2 + (z2 - z1) ** 2) * 1.0

xn = k * (x2 - x1) + x1

yn = k * (y2 - y1) + y1

zn = 0#k * (z2 - z1) + z1

return (xn, yn)def getdispointtoline(point,line_p1, line_p2):footp = getfootpoint(point, line_p1, line_p2)

if ((footp[0] - line_p1[0]) > 0) ^ ((footp[0] - line_p2[0]) > 0): # 異或符號,符號不同是為1,,說明垂足落在直線中

dist = np.linalg.norm((footp[0] - point[0], footp[1] - point[1]))

else:

dist = min(np.linalg.norm((line_p1[0] - point[0], line_p1[1] - point[1])),

np.linalg.norm((line_p2[0] - point[0], line_p2[1] - point[1])))

return dist

dis = getdispointtoline([1,-10],[0,0],[0,5])

點到線段的距離

最近由於工作任務的需要簡單研究了一下 1.可以列方程組,但太麻煩,繁瑣,不適合程式中執行 這種方法靠譜但還不夠精簡 3.用向量的方法,簡單實用,效率高。以下是我用as實現的 點到線段的距離 as 實現 var a point new point 0,0 線段起始點 var b point new p...

點到線段的距離(向量)

這種做法顯然可行,只是覺得比較繁瑣,想要更簡單一點的計算方式 二,向量做法,推薦看這篇部落格 我覺說得挺好的,看了很容易理解 我自己寫的 includeusing namespace std define ll long long const int maxn 1000 10 const ll mo...

如何計算點到線段的距離

這個方式,計算量大,實現複雜,別人看 也看不懂,不好維護 今天想了乙個新辦法,也許計算量還是大,但是實現簡單,可維護.1.計算線段長度l.這個有現成公式的,如果這個也看不懂,就可以開除了 2.計算點到線段起點和末點的距離d1和d2 3.如果l d1 and l d2,說明這個三角形中 線段兩個點 線...