求點到直線的距離是解析幾何中乙個非常基礎的問題。我們知道點a的座標(x_a,y_a),和直線bc上兩點b(x_b,y_b)和c(x_c,y_c)的座標,如何求解點a到bc的直線距離呢?我們可以根據以下公式來編寫python**實現功能:
公式描述:公式中的直線方程為ax+by+c=0,點p的座標為(x0,y0)。
我在github上找到了乙個library,叫做geomath,作者是乙個叫做vmesel的聖保羅小哥,他用物件導向的方式編寫了這個庫,並且上傳到了pypi上,還提供了geomath的官方文件(不過官方文件似乎有些地方有bug),主要有三大物件figure/line/point,我們可以用物件導向的程式設計輕鬆地實現解析幾何的各種計算,比如以上公式,我查閱了源**,可以發現api是這樣寫的:
def
point_distance
(self, pointtwo)
: equationa =((
float
(self.a)
*float
(pointtwo.x))+
(float
(self.b)
*float
(pointtwo.y))+
float
(self.c)
)if equationa ==0:
raise valueerror(
'point is inside the line!'
) equationb = sqrt(
(float
(self.a)
*float
(self.a))+
(float
(self.b)
*float
(self.b)))
return((
float
(equationa)
/float
(equationb)
))
公式和**基本上一一對應了,很舒服。唯一的區別就是沒有加絕對值,這個正負號可能有方向資訊,如果嚴格定義距離非負的話,我們可以使用絕對值函式進行非負處理。
對於開頭提到的問題,我們可以利用這個api自己簡單封裝乙個函式如下,在這個例程中我們假設a的座標為(0,1),b的座標為(1,0),c的座標為(1,1):
from geomath.point import point
from geomath.line import line
x_a,y_a =0,
1x_b,y_b =1,
0x_c,y_c =1,
1def
point2line_distance
(x_a,y_a,x_b,y_b,x_c,y_c)
: point_a = point(x_a,y_a)
point_b = point(x_b,y_b)
point_c = point(x_c,y_c)
l1 = line(
) l1.create(point_a, point_b)
return l1.point_distance(point_c)
print
(point2line_distance(x_a,y_a,x_b,y_b,x_c,y_c)
)
執行之後,我們得到計算結果:
這和我們手動計算是一樣的,之後再有類似的問題的話,我們只需要修改座標值就可以秒算答案了,避免了手動計算的繁瑣過程,可以說是非常舒服的了。
計算空間點到直線的距離
利用向量的叉積計算空間點到直線的距離,eigen庫已經給我封裝好了只需按著要求呼叫就好了。舉個簡單的例子如下 已知空間直線的方向向量表示為 m,n,p 已知直線上一點座標為b x0,y0,z0 求解空間點a x,y,z b到直線的距離d 需要構建兩個向量 eigen vector4d vec1 m,...
計算點到直線的距離 C 實現
如下圖所示,我們要計算的是c點到直線ab的距離。首先我們要認識到,雖然在數學上,點 與 向量 是兩種不同的名詞,但在實際的計算中是可以直接把 點 的座標視為從座標系 原點 到 點 的 向量 有了這個前提,線段ab其實可以簡單地表示為向量n,其他的向量同理可得。用向量解決這個問題的關鍵是求出v在n上的...
使用向量的方法來計算點到直線的距離
問題的原型如下圖所示,紅色的點為滑鼠位置,藍色的點 x0,y0 x1,y1 為線段的端點,求紅色的點到直線的距離 可以將點到線的距離轉換為直角三角形的問題,如下圖所示 我們定義滑鼠所在點為m,線段起點為a,終點為b,ma為向量a,ab為向量b,向量c為向量a在向量b上的投影,向量e為m點到ab的垂線...