Pythonで点から直線に下した足(Perpendicular legs)を計算する

直線$ax+by+c=0$に対し、点$(x_0,y_0)$からおろした垂線の足の座標(Perpendicular legs)と、垂線の長さを求めます。数式は次の通りです。

垂線の足の座標
$\ {\rm P}\left(\dfrac{b^2x_{0}-aby_{0}-ac}{a^{2}+b^{2}},\dfrac{a^2y_{0}-abx_{0}-bc}{a^{2}+b^{2}}\right)$

垂線の長さ
$d=\dfrac{|ax_{0}+by_{0}+c|}{\sqrt{a^{2}+b^{2}}}$

となります。Pythonで計算すると次の通りになります。

a=2
b=-1
c=1
p=(-7,12)
d=abs(a*p[0]+b*p[1]+c)/(a**2+b**2)**0.5
print('距離= ',d)
x=(b**2*p[0]-a*b*p[1]-a*c)/(a**2+b**2)
y=(a**2*p[1]-a*b*p[0]-b*c)/(a**2+b**2)
print('垂線の足',(x,y))
距離=  11.180339887498947
垂線の足 (3.0, 7.0)

Webで検索していると距離を求めるものはたくさん出てきますが、座標を計算するものには出会えませんでした。証明は別として、垂線の足を求めることができると便利なことが多そうです。

この記事を書いた人

目次
閉じる