空间解析几何——直线与平面
三维空间中的直线和平面与二维空间中的性质有一定的类似之处,但是其相交关系的求解方式有所差异。本文回顾了三维空间中直线和平面的解析表达,然后推导线-线
、线-面
交点。
平面
空间平面的表达式为:
A
x
+
B
y
+
C
z
+
D
=
0
(1)
Ax+By+Cz+D=0\tag{1}
Ax+By+Cz+D=0(1)
包含了4个参数
A
,
B
,
C
,
D
A,B,C,D
A,B,C,D,
(
A
,
B
,
C
)
(A,B,C)
(A,B,C)是平面的一个法向量。但是它们并非独立的,即法向量的长度可以是任意的。
若限定
A
,
B
,
C
A,B,C
A,B,C三个参数满足:
A
2
+
B
2
+
C
2
=
1
(2)
A^2+B^2+C^2=1\tag{2}
A2+B2+C2=1(2)
此时
(
A
,
B
,
C
)
(A,B,C)
(A,B,C)是平面的单位法向量,
D
D
D表示坐标原点到该平面的距离。方便起见,下面的讨论默认平面的A,B,C参数满足(2)式。
本质上,空间平面仅需要三个参数确定: ( n x , n y , 1 ) (n_x,n_y,1) (nx,ny,1)描述其法向量(仅需2参数), d d d描述其到原点的距离,表达式为 n x x + n y y + z + d = 0 n_x x+n_y y+z+d=0 nxx+nyy+z+d=0,与(1)是等价的。
直线
空间直线的一种表达是:两个平面的交。用
π
1
,
π
2
\pi_1,\pi_2
π1,π2表示两个不平行、不共面的平面,则一条空间直线可以表达为
l
=
π
1
∩
π
2
→
l
=
{
A
1
x
+
B
1
y
+
C
1
z
+
D
1
=
0
A
2
x
+
B
2
y
+
C
2
z
+
D
2
=
0
l=\pi_1\cap\pi_2\rightarrow l=\begin{cases}A_1 x+B_1 y+C_1 z+D_1=0\\A_2 x+B_2 y+C_2 z+D_2=0\end{cases}
l=π1∩π2→l={A1x+B1y+C1z+D1=0A2x+B2y+C2z+D2=0
显然,这种表达方式不是唯一的。一条空间直线可能是无数对平面的交线。
空间直线更常用的表达式为:
x
−
x
0
a
=
y
−
y
0
b
=
z
−
z
0
c
\dfrac{x-x_0}{a}=\dfrac{y-y_0}{b}=\dfrac{z-z_0}{c}
ax−x0=by−y0=cz−z0
包含6个参数 x 0 , y 0 , z 0 , a , b , c x_0,y_0,z_0, a,b,c x0,y0,z0,a,b,c, ( a , b , c ) (a,b,c) (a,b,c)是直线的方向向量,其长度任意,因而相当于只有两个独立参数; ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0,y0,z0)是直线上一点。因此,一条空间直线只需要5个独立参数即可描述。
点到平面的距离
点 ( x 1 , y 1 , z 1 ) (x_1,y_1,z_1) (x1,y1,z1)到平面 A x + B y + C z + D = 0 Ax+By+Cz+D=0 Ax+By+Cz+D=0的距离为:
d = ∣ A x 1 + B y 1 + C z 1 + D ∣ A 2 + B 2 + C 2 d=\dfrac{|Ax_1+By_1+Cz_1+D|}{\sqrt{A^2+B^2+C^2}} d=A2+B2+C2∣Ax1+By1+Cz1+D∣
点到直线的距离
点 ( x 1 , y 1 , z 1 ) (x_1,y_1,z_1) (x1,y1,z1)到直线 x − x 0 a = y − y 0 b = z − z 0 c \dfrac{x-x_0}{a}=\dfrac{y-y_0}{b}=\dfrac{z-z_0}{c} ax−x0=by−y0=cz−z0的距离为:
d = ∣ ( x 1 − x 0 , y 1 − y 0 , z 1 − z 0 ) × ( a , b , c ) ∣ a 2 + b 2 + c 2 d=\dfrac{|(x_1-x_0,y_1-y_0,z_1-z_0)\bold{\times} (a,b,c)|}{\sqrt{a^2+b^2+c^2}} d=a2+b2+c2∣(x1−x0,y1−y0,z1−z0)×(a,b,c)∣
表达式中为何出现叉积?这是因为, ∣ a × b ∣ = ∣ a ∣ ∣ b ∣ ∣ sin θ ∣ |a\times b |=|a||b||\sin\theta| ∣a×b∣=∣a∣∣b∣∣sinθ∣,而 d d d恰恰就等于 ∣ ( x 1 − x 0 , y 1 − y 0 , z 1 − z 0 ) ∣ ∗ ∣ sin θ ∣ |(x_1-x_0,y_1-y_0,z_1-z_0)|*|\sin\theta| ∣(x1−x0,y1−y0,z1−z0)∣∗∣sinθ∣。
直线之间的距离
两条直线
x
−
x
0
a
=
y
−
y
0
b
=
z
−
z
0
c
\dfrac{x-x_0}{a}=\dfrac{y-y_0}{b}=\dfrac{z-z_0}{c}
ax−x0=by−y0=cz−z0、
x
−
x
1
a
′
=
y
−
y
1
b
′
=
z
−
z
1
c
′
\dfrac{x-x_1}{a'}=\dfrac{y-y_1}{b'}=\dfrac{z-z_1}{c'}
a′x−x1=b′y−y1=c′z−z1,分别通过点P1
(
x
0
,
y
0
,
z
0
)
(x_0,y_0,z_0)
(x0,y0,z0)和P2
(
x
1
,
y
1
,
z
1
)
(x_1,y_1,z_1)
(x1,y1,z1)。
两条直线方向向量的叉积即为待求距离所在的方向,我们记作
N
=
(
a
,
b
,
c
)
×
(
a
′
,
b
′
,
c
′
)
N=(a,b,c)\times(a',b',c')
N=(a,b,c)×(a′,b′,c′)
则它们之间的距离为:
d
=
∣
(
x
1
−
x
0
,
y
1
−
y
0
,
z
1
−
z
0
)
⋅
N
∣
∣
∣
N
∣
∣
d = \dfrac{|(x_1-x_0,y_1-y_0,z_1-z_0)\cdot N|}{||N||}
d=∣∣N∣∣∣(x1−x0,y1−y0,z1−z0)⋅N∣
其中,
∣
∣
∗
∣
∣
||*||
∣∣∗∣∣表示取模。
直线与直线相交
两条直线
x
−
x
0
a
=
y
−
y
0
b
=
z
−
z
0
c
\dfrac{x-x_0}{a}=\dfrac{y-y_0}{b}=\dfrac{z-z_0}{c}
ax−x0=by−y0=cz−z0、
x
−
x
1
a
′
=
y
−
y
1
b
′
=
z
−
z
1
c
′
\dfrac{x-x_1}{a'}=\dfrac{y-y_1}{b'}=\dfrac{z-z_1}{c'}
a′x−x1=b′y−y1=c′z−z1,分别通过点P1
(
x
0
,
y
0
,
z
0
)
(x_0,y_0,z_0)
(x0,y0,z0)和P2
(
x
1
,
y
1
,
z
1
)
(x_1,y_1,z_1)
(x1,y1,z1)。
若两条空间直线相交,则它们必共面。与求解直线的距离类似,为了求两条空间直线的交点,首先计算两条直线方向向量的叉积
N
N
N。
解法一
由于两条直线的方向向量已知,所以求交点
C
C
C的问题,可以转化为求解CP1
长度的问题。将CP1
长度记为L,如图所示,显然有:
L = d / ∣ cos θ ∣ L=d/|\cos\theta| L=d/∣cosθ∣
而
d
d
d即P1点到另一直线的距离。即有:
d
=
∣
(
x
1
−
x
0
,
y
1
−
y
0
,
z
1
−
z
0
)
×
(
a
′
,
b
′
,
c
′
)
∣
a
′
2
+
b
′
2
+
c
′
2
d=\dfrac{|(x_1-x_0,y_1-y_0,z_1-z_0)\bold{\times} (a',b',c')|}{\sqrt{a'^2+b'^2+c'^2}}
d=a′2+b′2+c′2∣(x1−x0,y1−y0,z1−z0)×(a′,b′,c′)∣
两直线夹角的余弦为:
∣
cos
θ
∣
=
a
a
′
+
b
b
′
+
c
c
′
a
2
+
b
2
+
c
2
a
′
2
+
b
′
2
+
c
′
2
|\cos\theta|=\dfrac{aa'+bb'+cc'}{\sqrt{a^2+b^2+c^2}\sqrt{a'^2+b'^2+c'^2}}
∣cosθ∣=a2+b2+c2a′2+b′2+c′2aa′+bb′+cc′
那么,由于距离d没有符号,C点坐标为:
C
=
P
1
+
L
⋅
(
a
,
b
,
c
)
或
C
=
P
1
−
L
⋅
(
a
,
b
,
c
)
C=P1+L\cdot (a,b,c)\text{或}C=P1-L\cdot (a,b,c)
C=P1+L⋅(a,b,c)或C=P1−L⋅(a,b,c)
为确定C坐标为上面两个结果中的哪一个,将它们代入直线
l
2
l_2
l2的表达式,误差较小的那个就是真正的交点。
解法二
设未知数t,由于C在直线 l 1 l_1 l1上,其坐标可以表达为 ( x 0 + t a , y 0 + t b , z 0 + t c ) (x_0+ta,y_0+tb,z_0+tc) (x0+ta,y0+tb,z0+tc);代入直线 l 2 l_2 l2的表达式,有:
{ x 0 + t a − x 1 a ′ = y 0 + t b − y 1 b ′ x 0 + t a − x 1 a ′ = z 0 + t c − z 1 c ′ \begin{cases}\dfrac{x_0+ta-x_1}{a'}=\dfrac{y_0+tb-y_1}{b'}\\\dfrac{x_0+ta-x_1}{a'}=\dfrac{z_0+tc-z_1}{c'}\\\end{cases} ⎩ ⎨ ⎧a′x0+ta−x1=b′y0+tb−y1a′x0+ta−x1=c′z0+tc−z1
由上面两式,可分别求出两个t值:
t
1
=
(
x
1
−
x
0
)
b
′
−
(
y
1
−
y
0
)
a
′
a
b
′
−
a
′
b
t
2
=
(
x
1
−
x
0
)
c
′
−
(
z
1
−
z
0
)
a
′
a
c
′
−
a
′
c
t_1=\dfrac{(x_1-x_0)b'-(y_1-y_0)a'}{ab'-a'b}\\ t_2=\dfrac{(x_1-x_0)c'-(z_1-z_0)a'}{ac'-a'c}\\
t1=ab′−a′b(x1−x0)b′−(y1−y0)a′t2=ac′−a′c(x1−x0)c′−(z1−z0)a′
如果
t
1
,
t
2
t_1,t_2
t1,t2非常接近,则说明两直线确实交于一点;如果它们差异较大,说明两直线可能不相交(即不共面或平行)。
多条直线相交时,应按照最小二乘法求交点。
直线与平面相交
已知直线 x − x 0 a = y − y 0 b = z − z 0 c \dfrac{x-x_0}{a}=\dfrac{y-y_0}{b}=\dfrac{z-z_0}{c} ax−x0=by−y0=cz−z0,直线上一点P ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0,y0,z0),平面方程为: A x + B y + C z + D = 0 Ax+By+Cz+D=0 Ax+By+Cz+D=0,如图所示求交点坐标:
设未知数t,由于C在直线上,其坐标可以表达为
(
x
0
+
t
a
,
y
0
+
t
b
,
z
0
+
t
c
)
(x_0+ta,y_0+tb,z_0+tc)
(x0+ta,y0+tb,z0+tc):
因为C在平面上,所以满足
A
(
x
0
+
t
a
)
+
B
(
y
0
+
t
b
)
+
C
(
z
0
+
t
c
)
+
D
=
0
A(x_0+ta)+B(y_0+tb)+C(z_0+tc)+D=0
A(x0+ta)+B(y0+tb)+C(z0+tc)+D=0
整理可得
t
=
−
A
x
0
+
B
y
0
+
C
z
0
+
D
a
A
+
b
B
+
c
C
t=-\dfrac{Ax_0+By_0+Cz_0+D}{aA+bB+cC}
t=−aA+bB+cCAx0+By0+Cz0+D
那么,直线与平面的交点坐标为:
C
=
P
+
t
∗
(
a
,
b
,
c
)
C=P+t*(a,b,c)
C=P+t∗(a,b,c)