概要

線分と点との距離を求める方法を説明します。
まず直線との接線を求めてその交点が線分の範囲が収まっていれば交点と点との距離が求める距離です。
交点が線分に収まっていなければ始点終点からの距離をそれぞれ算出し短い方を点と線分との距離となります。 p0 p1 P C

2点を通過する直線と新点からの接線との交点

直線と点との距離は直線に対する接線が最短距離となります。
直線を1次式と、接線の1次式を求めます。
直線と直角に交わる直線の傾きは逆数で正負が逆になりますのでこれを使用します。
直線と接線が交わる点はxとyが同じとなりますので、連立方程式でxを求めさらにyを求めます。

直線の方程式

傾きaとy切片bで直線を表すと以下の式となります。
y=a \cdot x+b
点p0とp1を追加する直線の傾きとy切片は以下の様に算出できます。
\displaystyle a=\frac{p_1y-p_0y}{p_1x-p_0x}
b=p1_y - a \cdot p_1x

接線の方程式

接線は上記の直線と垂直に接します。
傾きは、直線の傾きaから算出します。
a \cdot a'=-1
\displaystyle a'=-\frac{1}{a}
y切片は点Pから算出できます。
b'=Py -a' \cdot Px

直線と接線の交点

直線と接線のy値が同一となるC点を算出します。
x値が分かればy値を算出することができます。
a \cdot x+b=a' \cdot x+b'
x(a-a')=b'-b
\displaystyle x=\frac{b'-b}{a-a'}
y=a' \cdot x+b'

算出例

2点 p0とp1を通過する直線とp点から直線への接線との交点Cの座標の算出例を示します。
p_0x=10,p_0y=5
p_1x=150,p_1y=100
Px=50,Py=150
\displaystyle a=\frac{p_1y-p_0y}{p_1x-p_0x}=\frac{100-5}{150-10}=0.679
b=p_1y - a \cdot p_1x=100-0.679 \times 150=-1.85
\displaystyle a'=-\frac{1}{a}=-\frac{1}{0.679}=-1.473
b'=Py -a' \cdot Px=150+1.473 \times 50=223.65
\displaystyle Cx=\frac{b'-b}{a-a'}=\frac{223.65+1.85}{0.679+1.473}=104.786
Cy=a' \cdot Cx+b'=-1.473 \times 104.786+223.65=223.56

2点を始終点とする線分と新点からの接線との交点と距離

上記の直線と新点からの接線との交点が線分の範囲になる場合は線分への最短距離となります。
線分の範囲に含まれない場合は、接線は存在しないので、始終点との距離をそれぞれ算出し近い点を採用します。

2点の距離

点Pと点Cとの距離dは以下のように算出できます。
d=\sqrt( (Cx-Px)^2+(Cy-Py)^2)