过P做MN的垂线,垂足为Q,若Q在线段MN以内(包括与点M点N重合),则最短距离为垂线段长度,若垂足在MN以外,则最短距离为PM,PN中的较小者。(若P与MN共线,垂线长度为零,同样适用)
所以可由 Q位置判断
若Q在线段MN上 则
∣
M
Q
∣
+
∣
Q
N
∣
=
∣
M
N
∣
\lvert MQ \rvert + |QN| = |MN|
∣MQ∣+∣QN∣=∣MN∣
或不开方的
∣
M
Q
∣
2
+
∣
Q
N
∣
2
≤
∣
M
N
∣
2
\lvert MQ \rvert ^2 + |QN|^2 \leq |MN|^2
∣MQ∣2+∣QN∣2≤∣MN∣2
所以最小距离可表示为
{
∣
P
Q
∣
|
M
Q
∣
+
∣
Q
N
∣
=
∣
M
N
∣
M
I
N
(
∣
P
N
∣
,
∣
P
M
∣
)
∣
M
Q
∣
+
∣
Q
N
∣
>
∣
M
N
∣
\left\{ \begin{array}{lcr} \lvert PQ \rvert & & \text |MQ | + |QN| = |MN| \\\\ MIN(|PN|,|PM|) & & \lvert MQ \rvert + |QN| \gt |MN| \end{array} \right.
⎩
⎨
⎧∣PQ∣MIN(∣PN∣,∣PM∣)|MQ∣+∣QN∣=∣MN∣∣MQ∣+∣QN∣>∣MN∣
或
{
∣
P
Q
∣
|
M
Q
∣
2
+
∣
Q
N
∣
2
≤
∣
M
N
∣
2
M
I
N
(
∣
P
N
∣
,
∣
P
M
∣
)
∣
M
Q
∣
2
+
∣
Q
N
∣
2
>
∣
M
N
∣
2
\left\{ \begin{array}{lcr} \lvert PQ \rvert & & \text |MQ | ^2 + |QN|^2 \leq |MN|^2 \\\\ MIN(|PN|,|PM|) & & \lvert MQ \rvert ^2 + |QN|^2 \gt |MN|^2 \end{array} \right.
⎩
⎨
⎧∣PQ∣MIN(∣PN∣,∣PM∣)|MQ∣2+∣QN∣2≤∣MN∣2∣MQ∣2+∣QN∣2>∣MN∣2
计算垂足
∠
b
=
∠
a
+
90
°
\angle b = \angle a + 90\degree
∠b=∠a+90°
tan
(
b
)
=
tan
(
a
+
π
2
)
=
−
cot
(
a
)
\tan(b) = \tan (a + \frac {\pi}{2} ) = - \cot(a)
tan(b)=tan(a+2π)=−cot(a)
MN斜率为k PQ斜率为 -1/k
{ y q − y p x q − x p = − 1 k y = k x + b \left\{ \begin{array}{lcr} \frac { y_q - y_p} { x_q - x_p} = -\frac {1}{k} \\\\ y= kx + b & & \end{array} \right. ⎩ ⎨ ⎧xq−xpyq−yp=−k1y=kx+b
点Q在MN上求解
{ x q = x p + k y p − k b 1 + k 2 y q = k x p + k 2 k y p + b 1 + k 2 \left\{ \begin{array}{lcr} x_q = \frac { x_p + k y_p - kb}{ 1 + k^2}\\\\ y_q = \frac { k x_p + k^2 k y_p + b}{ 1 + k^2} \\ \end{array} \right. ⎩ ⎨ ⎧xq=1+k2xp+kyp−kbyq=1+k2kxp+k2kyp+b
其中
{
b
=
y
m
−
y
n
−
y
m
x
n
−
x
m
x
m
=
x
n
y
m
−
x
m
y
n
x
n
−
x
m
k
=
y
n
−
y
m
x
n
−
x
m
\left\{ \begin{array}{lcr} b = y _m - \frac { y_n - y_m} { x_n - x_m} x_m = \frac { x_ny_m - x_m y_n} { x_n - x_m} & & \\\\ k = \frac { y_n - y_m} { x_n - x_m} & & \end{array} \right.
⎩
⎨
⎧b=ym−xn−xmyn−ymxm=xn−xmxnym−xmynk=xn−xmyn−ym
代入 M N P 坐标 可算出 垂足坐标
水平与坚直另分一种情况直接求解