點到線段的距離,如果點到直線的垂足位於線段中,則垂足就是所求距離;否則求點到線段端點的距離,作為所求距離
求點到線段的垂足:
#計算點到線的垂足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,說明這個三角形中 線段兩個點 線...