使用geomath包計算點到直線的距離

2021-10-12 12:43:27 字數 1803 閱讀 2467

求點到直線的距離是解析幾何中乙個非常基礎的問題。我們知道點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的垂線...