本文利用了点和直线、平面的齐次坐标表示方法,来推导2维点到直线距离,3维点到平面距离的公式。用齐次坐标表示方法推导比较简洁。
2维点到直线
令2维点: A
(
x
0
,
y
0
,
1
)
(x_0,y_0, 1)
(x0,y0,1), 2维直线方程:
a
x
+
b
y
+
c
=
0
ax+by+c=0
ax+by+c=0
2维直线
(
a
,
b
,
c
)
(a,b,c)
(a,b,c)中
a
2
+
b
2
=
1
a^2+b^2=1
a2+b2=1
直线上的任意点: B
(
x
′
,
y
′
,
1
)
(x',y', 1)
(x′,y′,1)
那么向量
A
B
→
\overrightarrow{AB}
AB与直线法向量
(
a
,
b
)
(a,b)
(a,b)的点积就是A到直线的距离
d
=
∣
(
x
0
−
x
′
)
∗
a
+
(
y
0
−
y
′
)
∗
b
∣
=
∣
x
0
∗
a
+
y
0
∗
b
+
c
∣
d=|(x_0-x')*a+(y_0-y')*b| =|x_0*a+y_0*b+c|
d=∣(x0−x′)∗a+(y0−y′)∗b∣=∣x0∗a+y0∗b+c∣
3维点到平面
推导跟2维一样,A
(
x
0
,
y
0
,
z
0
,
1
)
(x_0,y_0,z_0,1)
(x0,y0,z0,1), 3维平面
a
x
+
b
y
+
c
z
+
d
=
0
ax+by+cz+d=0
ax+by+cz+d=0
a
2
+
b
2
+
c
2
=
1
a^2+b^2+c^2=1
a2+b2+c2=1
B
(
x
′
,
y
′
,
z
′
,
1
)
(x',y',z',1)
(x′,y′,z′,1)
d
=
∣
(
x
0
−
x
′
)
∗
a
+
(
y
0
−
y
′
)
∗
b
+
(
z
0
−
z
′
)
∗
c
∣
=
∣
x
0
∗
a
+
y
0
∗
b
+
z
0
∗
c
+
d
∣
d=|(x_0-x')*a+(y_0-y')*b+(z_0-z')*c| =|x_0*a+y_0*b+z_0*c+d|
d=∣(x0−x′)∗a+(y0−y′)∗b+(z0−z′)∗c∣=∣x0∗a+y0∗b+z0∗c+d∣