点と直線の距離

Top »

直線 (a*x + b*y + c = 0) と点P (x1, y1) の距離。

|a*x1 + b*y1 + c|/sqrt(a^2 + b^2)

導出

図

直線の法線ベクトルv→は (a, b) である。

垂線の足を 点Q (x2, y2) とする。Qが直線上にあることにより、

a*x2 + b*y2 + c = 0
- a*x2 - b*y2 = c … (1)

QP→ = (x1-x2, y1-y2) と v は平行であることによりcos0 = 1である。内積は

QP・v = |QP| |v| = a*(x0-x1) + b*(y0-y1)

|QP|を解いて展開すると、

|QP| = (a*x1 + b*y1 - a*x2 - b*y2)/sqrt(a^2 + b^2)

(1)を代入すると

= (a*x1 + b*y1 + c)/sqrt(a^2 + b^2)

結果が負の値となることがあるが、この符号により点が直線のどちら側にあるか判定できる。実際の距離は絶対値とする。

= |a*x1 + b*y1 + c|/sqrt(a^2 + b^2)

足の座標

Qの位置ベクトルは、vを正規化して垂線の長さをかけPから引く。

Q = P - v * |QP| / |v|
|QP| / |v| = (a*x1 + b*y1 + c)/(a^2 + b^2)
x2 = x1 - a*(a*x1 + b*y1 + c)/(a^2 + b^2)
y2 = y1 - b*(a*x1 + b*y1 + c)/(a^2 + b^2)

inserted by FC2 system