点と直線の距離

ユークリッド幾何学において**点と直線の距離**（てんとちょくせんのきょり、）とは、点と直線上の任意の点の距離で最短になるものをいう。点と直線を結ぶ線分で点と直線の距離に等しい長さをもつものは、与えられた直線と直交する性質がある。点と直線の距離を計算する公式は、いくつかの方法によって導出できる。

点と直線の間の最短距離を知ることは様々な場面において有益である。例えば、道路までの最短距離が分かったり、グラフ上の値のちらばりを定量化したりなどである。線形曲線回帰の一種であるデミング回帰では、独立変数と従属変数が等しい分散を持つ場合には、近似曲線と各データ点の距離によって近似の精度が測定されるに帰着される。

## デカルト座標における距離
### 方程式で定義された直線
*ax* + *by* + *c* = 0の形の方程式により平面上の直線が与えられた場合（但し *a*, *b*, *c* は実数の定数で *a*, *b* は非零である）、点 (*x*0, *y*0) と直線の距離は

:\operatorname{distance}(ax+by+c=0, (x_0, y_0)) = \frac{\sqrt{a^2+b^2}}

となる。また直線上の点で、(*x*0, *y*0) に最も近い点の座標は以下で与えられる:

:x = \frac{b(bx_0 - ay_0)-ac}{a^2 + b^2} \text{ and } y = \frac{a(-bx_0 + ay_0) - bc}{a^2+b^2}.

**軸に平行な直線**

一般の直線の方程式 *ax* + *by* + *c* = 0 について、*c* が 0 でない限り *a* と *b* がともに 0 になることはない。またそのような場合、方程式はもはやどんな直線も定めない。もし *a* = 0, *b* ≠ 0 のときには直線は *x* 軸に平行で、方程式は *y* = −*c*/*b* となる。この直線と点 (*x*0,  *y*0) の距離は、上の等式にあてはめることにより長さ |*y*0 − (−*c*/*b*)| = |*by*0 + *c*|/|*b*| の *x* 軸に垂直な線分から得られる。同様に *x* 軸に垂直な直線 (*b* = 0) と点 (*x*0, *y*0) との距離も、長さ|*ax*0 + *c*|/|*a*| の *x* 軸に平行な線分から得られる。

### 直線が通る2点によって定義された直線
点 *P*1=(*x*1,*y*1) *P*2=(*x<sub>2</sub>*,*y<sub>2</sub>*)の2点を通過する直線と点(x0、y0)の距離は以下で与えられる:

:\operatorname{distance}(P_1, P_2, (x_0, y_0)) = \frac{\sqrt{(y_2-y_1)^2+(x_2-x_1)^2}}.

分母は、点*P<sub>1</sub>*と点*P<sub>2</sub>*の距離である。分子は、直線上の2点と点(*x*0,*y*0)を頂点とする三角形の面積の2倍になっている（参照: :en:Area of a triangle#Using coordinates）。 この公式は、三角形の面積を求める公式 A=\frac{1}{2} bhを変形して得られるh=\frac{2A}{b}と同値である。但し*b*は三角形の底辺の長さを、*h*はその底辺に対する三角形の高さを表す。

## 証明
### 代数的な証明
この証明は、直線が座標軸に対して平行でも垂直でもない場合にのみ、つまり直線の方程式で*a*も*b*も0でない場合にのみ成り立つ証明である。

方程式 *ax* + *by* + *c* = 0 で表される直線の傾きは −*a*/*b* であるから、この直線に対して垂直な任意の線分の傾きは*b*/*a*（与えられた直線の傾きの逆数の負）である。ここで点(*m*, *n*)を、与えられた直線と、点(*x*0, *y*0)を通り与えられた直線に直交する直線の交点とする。点(*m*, *n*)と点(*x*0, *y*0)を通る直線は元の直線に直交するから

:\frac{y_0 - n}{x_0 - m}=\frac{b}{a}.

したがってa(y_0 -n) - b(x_0 - m) = 0 が得られ、さらに両辺を2乗することで以下を得る：

:a^2(y_0 - n)^2 + b^2(x_0 - m)^2 = 2ab(y_0 - n)(x_0 - m).

ここで、次の等式を考える。但し第2式から第3式への変形には、上の2乗した等式を用いた。

: (a(x_0 - m) + b(y_0 - n))^2 = a^2(x_0 - m)^2 + 2ab(y_0 -n)(x_0 - m) + b^2(y_0 - n)^2 = (a^2 + b^2)((x_0 - m)^2 + (y_0 - n)^2).

 一方で、点*(m, n)*が*ax + by + c =0*上にあることから、次の式も成り立つ：

: (a(x_0 - m) + b(y_0 - n))^2 = (ax_0 + by_0 - am -bn )^2 = (ax_0 + by_0 + c)^2.

したがって

:(a^2 + b^2)((x_0 - m)^2 + (y_0 - n)^2) = (ax_0 + by_0 + c)^2,

となり、点*(m, n)*と点(*x*0, *y*0)を結ぶ線分の距離を求めることができた：

:d=\sqrt{(x_0 - m)^2+(y_0 - n)^2}= \frac{\sqrt{a^2+b^2}}.

### 幾何学的な証明

この証明も、直線が軸に水平または垂直でない場合にのみ成り立つ。

点*P*(*x*0, *y*0)から*Ax* + *By* + *C* =0で表される直線に垂線を下ろし、垂線の足を点*R*とする。また点*P*から*y*軸に平行な直線を引き、それと元の直線の交点を点*S*とする。次に、直線上に点*T*を任意にとり、直角三角形*TVU*を描く。但し*TU*を斜辺とし、残り2辺はそれぞれ*x*軸、*y*軸に平行とする。さらに*x*軸に平行な辺*TV*の長さは|*B*|となるようにする(図参照)。こうすることで、直線の傾きが −*A*/*B* であるから*y*軸に平行な辺*VU*の長さは |*A*| となる。

ここで、∆*PRS*と∆*TVU*は相似である。なぜならば両者とも直角三角形であり、さらに*PS* と *UV* が平行で同位角が等しいからである。したがって対応する辺の長さの比は等しいので、

:\frac = \frac.

また点*S*の座標を（*x*0,*m*)とすると|*PS*|=|*y*0 − *m*|で、点*P*と直線の距離|*PR*|は、

: |\overline{PR} | = \frac{\sqrt{A^2 + B^2}}.

ところで点*S*は直線上の点だから、*m*の値は*A, B, C*を用いて

:m = \frac{-Ax_0 - C}{B},

と表せるので、これを代入すれば結局:

: |\overline{PR}| = \frac{\sqrt{A^2 + B^2}}.

なお、類似の証明として、点*V*を点*P*と同一の点とし、∆*UVT*の面積を2通りの方法で求めることにより点*P*と直線の距離の公式を導く方法がある。点*V*と点*P*を同一の点とした時、∆*UVT*の面積はまず　で求められる。一方で、*TU*を底辺と考えることで、点*P*から直線におろした垂線の長さを高さとして面積を求められる。*TU, VU, VT*の長さは点*P*の座標と直線の方程式の係数を用いて表せるので、そこから点と直線の距離の公式が導ける。

### ベクトルの射影を用いた証明

点*P*(*x*0, *y*0)と、*ax* + *by* + *c* =0で与えられる直線を考える。また、点*Q*(*x*1, *y*1)を直線上の任意の点とし、ベクトル**n**(*a*, *b*)を点*Q*を始点とする法線ベクトルとする。このとき、点*P*と直線の距離*d*は、ベクトル*QP*を**n**に直交射影したものの長さと等しい。この射影したベクトルの長さは、

:d = \frac{\| \mathbf{n}\|}.

となる。いま、

: \overrightarrow{QP} = (x_0 - x_1, y_0 - y_1),

なので、

: \overrightarrow{QP} \cdot \mathbf{n} = a(x_0 - x_1) + b(y_0 - y_1),  \| \mathbf{n} \| = \sqrt{a^2 + b^2},

であるから、

: d = \frac{\sqrt{a^2 + b^2}}.

点*Q*が直線上の点であることと c = -ax_1 - by_1から、

: d = \frac{\sqrt{a^2 + b^2}}.

## その他の公式
点と直線の最短距離を表す公式は他にも考えられる。以下の導出は、やはり直線が*x*軸にも*y*軸にも平行でないことを必要とする。

点*P*(*x*0, *y*0)と方程式y=mx+kで与えられる直線を考える。すると、点*P*を通る法線の方程式はy=\frac{x_0-x}{m}+y_0となる。

この2直線の交点は、直線上の点の中で点*P*から最も近い点である。したがって、

:mx+k=\frac{x_0-x}{m}+y_0.

これを*x*について解けば、

:x=\frac{x_0+my_0-mk}{m^2+1}.

交点の*y*座標は、いま得られた*x*座標の式を直線の方程式に代入すれば求められて、

:y=m\frac{(x_0+my_0-mk)}{m^2+1}+k.

2点間の距離はd=\sqrt{(X_2-X_1)^2+(Y_2-Y_1)^2}で求められるから、ここから点と直線の距離の公式として以下を得る。

:d=\sqrt{ \left( {\frac{x_0 + m y_0-mk}{m^2+1}-x_0 } \right) ^2 + \left( {m\frac{x_0+m y_0-mk}{m^2+1}+k-y_0 }\right) ^2 } = \frac\sqrt{1 + m^2} .

なお、ここでは直線の方程式を*y=mx+k*としたが、*ax+by+c=0*と比較すると*m* =-*a*/*b*, *k* =- *c*/*b*である。これを上式に代入し整理すれば、最初に導出した点と直線の公式が確かに得られる。

## ベクトルを用いた公式

直線の方程式は、ベクトル方程式として与えることもできる：

:  \mathbf{x} = \mathbf{a} + t\mathbf{n}

ここで  は直線のある点を表す位置ベクトルで、  は直線の方向を表す単位ベクトル である。また*t*はスカラー変数で、が直線の軌跡となる。

ここで、平面の任意の点 とこの直線の距離は以下のように与えられる：

: \operatorname{distance}(\mathbf{x} = \mathbf{a} + t\mathbf{n}, \mathbf{p}) = \| (\mathbf{a}-\mathbf{p}) - ((\mathbf{a}-\mathbf{p}) \cdot  \mathbf{n})\mathbf{n} \|. 

この公式は次のように導出できる: \mathbf{a}-\mathbf{p}は点から点へのベクトルである。(\mathbf{a} - \mathbf{p}) \cdot  \mathbf{n} はそのベクトルを直線に射影したものの長さなので、

:((\mathbf{a} - \mathbf{p}) \cdot  \mathbf{n})\mathbf{n}

は、\mathbf{a}-\mathbf{p}を直線に正射影したベクトルである。したがって、

:(\mathbf{a}-\mathbf{p}) - ((\mathbf{a}-\mathbf{p}) \cdot  \mathbf{n})\mathbf{n}

は、直線に垂直な\mathbf{a}-\mathbf{p}の成分である。つまり点と直線の距離は、このベクトルのノルムそのものである。この公式は、二次元に限らず適用できるように一般化できる。

## その他のベクトルを用いた公式
もしベクトル空間が正規直交系ならば、方向ベクトル\vec uを持ち点*A*を通る直線*l*を考えると点*P*と直線*l*の距離は、

: d(\mathrm{P}, l)= \frac{\left\|\overrightarrow{\mathrm{AP}} \times\vec u\right\|}{\|\vec u\|}

ここで\overrightarrow{\mathrm{AP}} \times\vec u はベクトル\overrightarrow{\mathrm{AP}} と \vec uの外積で、\|\vec u\|は\vec uのノルムである。

但し、外積が存在するのは3次元と7次元の場合に限ることに注意せねばならない。

## 脚注

### 注釈

### 出典

## 参考文献
* 
* 
* 
* 
* 

## 関連項目
* ヘッセ標準形
* 
* 
* 
* 英:ねじれの位置#距離

## 外部リンク
* 
*