计算三维空间中点到平面的投影点坐标
问题概述:
三维平面的一般方程为:
(1)
A
x
+
B
y
+
C
z
+
D
=
0
Ax+By+Cz+D = 0\tag{1}
Ax+By+Cz+D=0(1)
已知点
(
a
,
b
,
c
)
(a,b,c)
(a,b,c),求该点在平面上的投影
(
x
0
,
y
0
,
z
0
)
(x_0,y_0,z_0)
(x0,y0,z0)
方法一(利用参数方程):
显然连接点
(
a
,
b
,
c
)
(a,b,c)
(a,b,c)和点
(
x
0
,
y
0
,
z
0
)
(x_0,y_0,z_0)
(x0,y0,z0)所形成的直线(假设为
l
1
l_1
l1)肯定与该平面的法向量平行,则向量
(
A
,
B
,
C
)
(A,B,C)
(A,B,C)(平面的法向量)是直线
l
1
l_1
l1的方向向量。所以已知直线上一点和直线的方向向量,我们可以得到直线
l
1
l_1
l1的参数方程如下:
(2.1)
x
−
a
A
=
y
−
b
B
=
z
−
c
C
=
t
\cfrac{x-a}{A}=\cfrac{y-b}{B}=\cfrac{z-c}{C}=t \tag{2.1}
Ax−a=By−b=Cz−c=t(2.1)
则可得
(2.2)
{
x
=
A
t
+
a
y
=
B
t
+
b
z
=
C
t
+
c
\begin{cases} x = At + a \tag{2.2} \\ y = Bt + b \\ z = Ct + c \\ \end{cases}
⎩⎪⎨⎪⎧x=At+ay=Bt+bz=Ct+c(2.2)
将
(
2.2
)
(2.2)
(2.2)代入原方程
(
1
)
(1)
(1)得
A
x
+
B
y
+
C
z
+
D
=
A
∗
(
A
t
+
a
)
+
B
∗
(
B
t
+
b
)
+
C
∗
(
C
t
+
c
)
+
D
=
A
2
t
+
A
a
+
B
2
t
+
B
b
+
C
2
t
+
C
c
+
D
=
(
A
2
+
B
2
+
C
2
)
t
+
A
a
+
B
b
+
C
c
+
D
\begin{aligned} &Ax+By+Cz+D\\ =&A*(At+a)+B*(Bt+b)+C*(Ct+c)+D\\ =&A^2t+Aa+B^2t+Bb+C^2t+Cc+D\\ =&(A^2+B^2+C^2)t+Aa+Bb+Cc+D\\ \end{aligned}
===Ax+By+Cz+DA∗(At+a)+B∗(Bt+b)+C∗(Ct+c)+DA2t+Aa+B2t+Bb+C2t+Cc+D(A2+B2+C2)t+Aa+Bb+Cc+D
即
(2.3)
(
A
2
+
B
2
+
C
2
)
t
+
A
a
+
B
b
+
C
c
+
D
=
0
(A^2+B^2+C^2)t+Aa+Bb+Cc+D=0\tag{2.3}
(A2+B2+C2)t+Aa+Bb+Cc+D=0(2.3)
化简式
(
2.3
)
(2.3)
(2.3)得
(2.4)
t
=
−
(
A
a
+
B
b
+
C
c
+
D
)
(
A
2
+
B
2
+
C
2
)
t = \cfrac{-(Aa+Bb+Cc+D)}{(A^2+B^2+C^2)}\tag{2.4}
t=(A2+B2+C2)−(Aa+Bb+Cc+D)(2.4)
将
(
2.4
)
(2.4)
(2.4)代入
(
2.2
)
(2.2)
(2.2)中得:
(2.5)
(
x
0
,
y
0
,
z
0
)
=
{
x
0
=
A
t
+
a
y
0
=
B
t
+
b
z
0
=
C
t
+
c
=
{
x
0
=
−
A
∗
(
B
b
+
C
c
+
D
)
+
a
∗
(
B
2
+
C
2
)
(
A
2
+
B
2
+
C
2
)
y
0
=
−
B
∗
(
A
a
+
C
c
+
D
)
+
b
∗
(
A
2
+
C
2
)
(
A
2
+
B
2
+
C
2
)
z
0
=
−
C
∗
(
A
a
+
B
b
+
D
)
+
c
∗
(
A
2
+
B
2
)
(
A
2
+
B
2
+
C
2
)
\begin{aligned} (x_0,y_0,z_0)&=\tag{2.5} \begin{cases} x_0 = At + a \\ y_0 = Bt + b \\ z_0 = Ct + c \\ \end{cases}\\ &= \begin{cases} x_0 = \cfrac{-A*(Bb+Cc+D)+a*(B^2+C^2)}{(A^2+B^2+C^2)} \\ y_0 = \cfrac{-B*(Aa+Cc+D)+b*(A^2+C^2)}{(A^2+B^2+C^2)} \\ z_0 = \cfrac{-C*(Aa+Bb+D)+c*(A^2+B^2)}{(A^2+B^2+C^2)} \\ \end{cases} \end{aligned}
(x0,y0,z0)=⎩⎪⎨⎪⎧x0=At+ay0=Bt+bz0=Ct+c=⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧x0=(A2+B2+C2)−A∗(Bb+Cc+D)+a∗(B2+C2)y0=(A2+B2+C2)−B∗(Aa+Cc+D)+b∗(A2+C2)z0=(A2+B2+C2)−C∗(Aa+Bb+D)+c∗(A2+B2)(2.5)
即可求得投影点坐标
(
x
0
,
y
0
,
z
0
)
(x_0,y_0,z_0)
(x0,y0,z0)
方法二(利用垂直的性质):
同上,显然连接点
(
a
,
b
,
c
)
(a,b,c)
(a,b,c)和点
(
x
0
,
y
0
,
z
0
)
(x_0,y_0,z_0)
(x0,y0,z0)所形成的直线(假设为
l
1
l_1
l1)肯定与该平面的法向量平行,即与该平面垂直。
易得该平面与
x
O
y
xOy
xOy平面的交线(假设为
l
x
y
l_{xy}
lxy)(令
z
=
0
z=0
z=0即可)
(3.1)
l
x
y
:
A
x
+
B
y
+
D
=
0
l_{xy}:Ax+By+D=0\tag{3.1}
lxy:Ax+By+D=0(3.1)
同理得该平面与
x
O
z
xOz
xOz平面的交线(假设为
l
x
z
l_{xz}
lxz)
(3.2)
l
x
z
:
A
x
+
C
z
+
D
=
0
l_{xz}:Ax+Cz+D=0\tag{3.2}
lxz:Ax+Cz+D=0(3.2)
则有
l
1
l_1
l1与
l
x
y
l_{xy}
lxy垂直,可得:
(3.3)
−
B
∗
(
x
0
−
a
)
+
A
y
−
b
=
0
-B*(x_0-a)+Ay-b = 0\tag{3.3}
−B∗(x0−a)+Ay−b=0(3.3)
又有
l
1
l_1
l1与
l
x
z
l_{xz}
lxz垂直,可得:
(3.4)
−
C
∗
(
x
0
−
a
)
+
A
z
−
c
=
0
-C*(x_0-a)+Az-c = 0\tag{3.4}
−C∗(x0−a)+Az−c=0(3.4)
将公式
(
3.3
)
,
(
3.4
)
(3.3),(3.4)
(3.3),(3.4)代入
(
1
)
(1)
(1)中得:
(3.5)
x
0
=
−
A
∗
(
B
b
+
C
c
+
D
)
+
a
∗
(
B
2
+
C
2
)
(
A
2
+
B
2
+
C
2
)
x_0 = \cfrac{-A*(Bb+Cc+D)+a*(B^2+C^2)}{(A^2+B^2+C^2)}\tag{3.5}
x0=(A2+B2+C2)−A∗(Bb+Cc+D)+a∗(B2+C2)(3.5)
将公式
(
3.5
)
(3.5)
(3.5)代入
(
3.3
)
,
(
3.4
)
(3.3),(3.4)
(3.3),(3.4)中得:
(3.6)
{
x
0
=
−
A
∗
(
B
b
+
C
c
+
D
)
+
a
∗
(
B
2
+
C
2
)
(
A
2
+
B
2
+
C
2
)
y
0
=
−
B
∗
(
A
a
+
C
c
+
D
)
+
b
∗
(
A
2
+
C
2
)
(
A
2
+
B
2
+
C
2
)
z
0
=
−
C
∗
(
A
a
+
B
b
+
D
)
+
c
∗
(
A
2
+
B
2
)
(
A
2
+
B
2
+
C
2
)
\begin{cases} x_0 = \cfrac{-A*(Bb+Cc+D)+a*(B^2+C^2)}{(A^2+B^2+C^2)} \tag{3.6}\\ y_0 = \cfrac{-B*(Aa+Cc+D)+b*(A^2+C^2)}{(A^2+B^2+C^2)} \\ z_0 = \cfrac{-C*(Aa+Bb+D)+c*(A^2+B^2)}{(A^2+B^2+C^2)} \\ \end{cases}
⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧x0=(A2+B2+C2)−A∗(Bb+Cc+D)+a∗(B2+C2)y0=(A2+B2+C2)−B∗(Aa+Cc+D)+b∗(A2+C2)z0=(A2+B2+C2)−C∗(Aa+Bb+D)+c∗(A2+B2)(3.6)
即可求得投影点坐标
(
x
0
,
y
0
,
z
0
)
(x_0,y_0,z_0)
(x0,y0,z0)
推广到计算K维空间中点到平面的投影点坐标
此处只介绍参数方程的方法,方法二可自行推广,得到的结果是一样的
问题概述:
三维平面的一般方程为:
(1)
A
1
x
1
+
A
2
x
2
+
.
.
.
+
A
k
x
k
+
D
=
0
A_1x_1+A_2x_2+...+A_kx_k+D = 0\tag{1}
A1x1+A2x2+...+Akxk+D=0(1)
已知点
P
(
p
1
,
p
2
,
.
.
.
,
p
k
)
P(p_1,p_2,...,p_k)
P(p1,p2,...,pk),求该点在平面上的投影
(
v
1
,
v
2
,
.
.
.
,
v
k
)
(v_1,v_2,...,v_k)
(v1,v2,...,vk)
方法一(利用参数方程):
显然连接点
(
p
1
,
p
2
,
.
.
.
,
p
k
)
(p_1,p_2,...,p_k)
(p1,p2,...,pk)和点
(
v
1
,
v
2
,
.
.
.
,
v
k
)
(v_1,v_2,...,v_k)
(v1,v2,...,vk)所形成的直线(假设为
l
1
l_1
l1)肯定与该平面的法向量平行,则向量
(
A
1
,
A
2
,
.
.
.
,
A
k
)
(A_1,A_2,...,A_k)
(A1,A2,...,Ak)(平面的法向量)是直线
l
1
l_1
l1的方向向量。所以已知直线上一点和直线的方向向量,我们可以得到直线
l
1
l_1
l1的参数方程如下:
(2.1)
x
1
−
p
1
A
1
=
x
2
−
p
2
A
2
=
.
.
.
=
x
k
−
p
k
A
k
=
t
\cfrac{x_1-p_1}{A_1}=\cfrac{x_2-p_2}{A_2}=...=\cfrac{x_k-p_k}{A_k}=t \tag{2.1}
A1x1−p1=A2x2−p2=...=Akxk−pk=t(2.1)
则可得
(2.2)
{
v
1
=
A
1
t
+
p
1
v
2
=
A
2
t
+
p
2
.
.
.
v
k
=
A
k
t
+
p
k
\begin{cases} v_1 &=& A_1t + p_1 \tag{2.2} \\ v_2 &=& A_2t + p_2 \\ &...&\\ v_k &=& A_kt + p_k \\ \end{cases}
⎩⎪⎪⎪⎨⎪⎪⎪⎧v1v2vk==...=A1t+p1A2t+p2Akt+pk(2.2)
将
(
2.2
)
(2.2)
(2.2)代入原方程
(
1
)
(1)
(1)得
A
1
x
1
+
A
2
x
2
+
.
.
.
+
A
k
x
k
+
D
=
A
1
∗
(
A
1
t
+
p
1
)
+
A
2
∗
(
A
2
t
+
p
2
)
+
.
.
.
+
A
k
∗
(
A
k
t
+
p
k
)
+
D
=
A
1
2
+
A
1
∗
p
1
+
A
2
2
+
A
2
∗
p
2
+
.
.
.
+
A
k
2
+
A
k
∗
p
k
+
D
=
(
A
1
2
+
A
2
2
+
.
.
.
+
A
k
2
)
t
+
A
1
P
1
+
A
2
P
2
+
.
.
.
+
A
k
P
k
+
D
\begin{aligned} &A_1x_1+A_2x_2+...+A_kx_k+D\\ =&A_1*(A_1t+p_1)+A_2*(A_2t+p_2)+...+A_k*(A_kt+p_k)+D\\ =&A_1^2+A_1*p_1+A_2^2+A_2*p_2+...+A_k^2+A_k*p_k+D\\ =&(A_1^2+A_2^2+...+A_k^2)t+A_1P_1+A_2P_2+...+A_kP_k+D\\ \end{aligned}
===A1x1+A2x2+...+Akxk+DA1∗(A1t+p1)+A2∗(A2t+p2)+...+Ak∗(Akt+pk)+DA12+A1∗p1+A22+A2∗p2+...+Ak2+Ak∗pk+D(A12+A22+...+Ak2)t+A1P1+A2P2+...+AkPk+D
即
(2.3)
(
A
1
2
+
A
2
2
+
.
.
.
+
A
k
2
)
t
+
A
1
P
1
+
A
2
P
2
+
.
.
.
+
A
k
P
k
+
D
=
0
(A_1^2+A_2^2+...+A_k^2)t+A_1P_1+A_2P_2+...+A_kP_k+D=0\tag{2.3}
(A12+A22+...+Ak2)t+A1P1+A2P2+...+AkPk+D=0(2.3)
化简式
(
2.3
)
(2.3)
(2.3)得
(2.4)
t
=
−
(
A
1
P
1
+
A
2
P
2
+
.
.
.
+
A
k
P
k
+
D
)
(
A
1
2
+
A
2
2
+
.
.
.
+
A
k
2
)
t = \cfrac{-(A_1P_1+A_2P_2+...+A_kP_k+D)}{(A_1^2+A_2^2+...+A_k^2)}\tag{2.4}
t=(A12+A22+...+Ak2)−(A1P1+A2P2+...+AkPk+D)(2.4)
将
(
2.4
)
(2.4)
(2.4)代入
(
2.2
)
(2.2)
(2.2)中得:
(2.5)
(
v
1
,
v
2
,
.
.
.
,
v
k
)
=
{
v
1
=
A
1
t
+
p
1
v
2
=
A
2
t
+
p
2
.
.
.
v
k
=
A
k
t
+
p
k
=
{
v
1
=
−
A
1
∗
(
A
1
p
1
+
A
2
p
2
+
.
.
.
+
A
k
p
k
+
D
−
A
1
p
1
)
+
p
1
∗
(
A
1
2
+
A
2
2
+
.
.
.
+
A
k
2
−
A
1
2
)
(
A
1
2
+
A
2
2
+
.
.
.
+
A
k
2
)
)
v
2
=
−
A
2
∗
(
A
1
p
1
+
A
2
p
2
+
.
.
.
+
A
k
p
k
+
D
−
A
2
p
2
)
+
p
2
∗
(
A
1
2
+
A
2
2
+
.
.
.
+
A
k
2
−
A
2
2
)
(
A
1
2
+
A
2
2
+
.
.
.
+
A
k
2
)
)
.
.
.
v
k
=
−
A
3
∗
(
A
1
p
1
+
A
2
p
2
+
.
.
.
+
A
k
p
k
+
D
−
A
k
p
k
)
+
p
3
∗
(
A
1
2
+
A
2
2
+
.
.
.
+
A
k
2
−
A
k
2
)
(
A
1
2
+
A
2
2
+
.
.
.
+
A
k
2
)
)
\begin{aligned} &(v_1,v_2,...,v_k)\\ &=\tag{2.5} \begin{cases} v_1 &=& A_1t + p_1 \\ v_2 &=& A_2t + p_2 \\ &...&\\ v_k &=& A_kt + p_k \\ \end{cases}\\ &= \begin{cases} v_1 &=& \cfrac{-A_1*(A_1p_1+A_2p_2+...+A_kp_k+D-A_1p_1)+p_1*(A_1^2+A_2^2+...+A_k^2-A_1^2)}{(A_1^2+A_2^2+...+A_k^2))} \\ v_2 &=& \cfrac{-A_2*(A_1p_1+A_2p_2+...+A_kp_k+D-A_2p_2)+p_2*(A_1^2+A_2^2+...+A_k^2-A_2^2)}{(A_1^2+A_2^2+...+A_k^2))} \\ &...&\\ v_k &=& \cfrac{-A_3*(A_1p_1+A_2p_2+...+A_kp_k+D-A_kp_k)+p_3*(A_1^2+A_2^2+...+A_k^2-A_k^2)}{(A_1^2+A_2^2+...+A_k^2))} \\ \end{cases} \end{aligned}
(v1,v2,...,vk)=⎩⎪⎪⎪⎨⎪⎪⎪⎧v1v2vk==...=A1t+p1A2t+p2Akt+pk=⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧v1v2vk==...=(A12+A22+...+Ak2))−A1∗(A1p1+A2p2+...+Akpk+D−A1p1)+p1∗(A12+A22+...+Ak2−A12)(A12+A22+...+Ak2))−A2∗(A1p1+A2p2+...+Akpk+D−A2p2)+p2∗(A12+A22+...+Ak2−A22)(A12+A22+...+Ak2))−A3∗(A1p1+A2p2+...+Akpk+D−Akpk)+p3∗(A12+A22+...+Ak2−Ak2)(2.5)
即可求得投影点坐标
(
v
1
,
v
2
,
.
.
.
,
v
k
)
(v_1,v_2,...,v_k)
(v1,v2,...,vk)
例题:
2018北京ICPC网络赛H