计算三维空间中点到平面的投影点坐标


问题概述:

三维平面的一般方程为:
(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} A1​x1​+A2​x2​+...+Ak​xk​+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} A1​x1​−p1​​=A2​x2​−p2​​=...=Ak​xk​−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} ⎩⎪⎪⎪⎨⎪⎪⎪⎧​v1​v2​vk​​==...=​A1​t+p1​A2​t+p2​Ak​t+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} ===​A1​x1​+A2​x2​+...+Ak​xk​+DA1​∗(A1​t+p1​)+A2​∗(A2​t+p2​)+...+Ak​∗(Ak​t+pk​)+DA12​+A1​∗p1​+A22​+A2​∗p2​+...+Ak2​+Ak​∗pk​+D(A12​+A22​+...+Ak2​)t+A1​P1​+A2​P2​+...+Ak​Pk​+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+A1​P1​+A2​P2​+...+Ak​Pk​+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​)−(A1​P1​+A2​P2​+...+Ak​Pk​+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​)=⎩⎪⎪⎪⎨⎪⎪⎪⎧​v1​v2​vk​​==...=​A1​t+p1​A2​t+p2​Ak​t+pk​​=⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧​v1​v2​vk​​==...=​(A12​+A22​+...+Ak2​))−A1​∗(A1​p1​+A2​p2​+...+Ak​pk​+D−A1​p1​)+p1​∗(A12​+A22​+...+Ak2​−A12​)​(A12​+A22​+...+Ak2​))−A2​∗(A1​p1​+A2​p2​+...+Ak​pk​+D−A2​p2​)+p2​∗(A12​+A22​+...+Ak2​−A22​)​(A12​+A22​+...+Ak2​))−A3​∗(A1​p1​+A2​p2​+...+Ak​pk​+D−Ak​pk​)+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

计算三维空间(推广到K维)中点到平面的投影点坐标相关推荐

  1. 如何计算三维空间中点到平面的投影点坐标

    三维空间平面的一般方程为                  (1) 假定不在平面上的三维空间点坐标为,其在平面上的投影点坐标为.因为投影点到当前点与平面垂直,根据垂直约束条件,易知与满足如下条件:   ...

  2. 3D数学 | 如何计算三维空间中点到平面的投影点坐标

    三维空间平面的一般方程为 假定不在平面上的三维空间点坐标为,其在平面上的投影点坐标为.因为投影点到当前点与平面垂直,根据垂直约束条件,易知与满足如下条件: 将(2)和(3)代入(1),可以解得: 将( ...

  3. 计算空间点到平面的投影点坐标

    已知空间平面S的中心点坐标O(x0,y0,z0)和法方向n⃗ =(xs,ys,zs),以及平面外一点P(xp,yp,zp). 已知空间平面 S 的中心点坐标O(x_0, y_0, z_0)和法方向\v ...

  4. Cloudcompare 点到平面的距离以及点到平面的投影点

    Cloudcompare 点到平面的距离以及投影点坐标 引言 一.软件操作 二.源码解读 2.1 准备工作 2.2 计算距离 2.3 投影点坐标 引言 对比两组点云的相似度,一般都是使用距离来量化重合 ...

  5. 计算二叉树的第k层中所有叶子结点个数

    计算二叉树的第k层中所有叶子结点个数 Time Limit:1000MS Memory Limit:65535K 题型: 编程题 语言: 无限制 描述 二叉链表表示的二叉树:按先序次序输入二叉树中结点 ...

  6. 3D点云处理:平面度|平行度(增加精度的平行度优化)|平面之间的夹角|点到平面的投影点

    文章目录 1. 平面度 2. 平行度 3. 两平面之间的夹角 4. 点到平面的投影 5. 代码实现--平面度|平行度(增加精度的平行度优化)|平面之间的夹角|点到平面的投影点 1. 平面度 根据最新I ...

  7. 计算点到直线方程的投影点坐标

    点 $(x_0, y_0)$到直线 $ax + by + c = 0$的垂足的坐标 $(x_1, y_1)$ 满足以下条件: - 点 $(x_1, y_1)$ 在直线上 - 点 $(x_1, y_1) ...

  8. 2. 计算点到平面的投影

    参考 https://www.cnblogs.com/nobodyzhou/p/6145030.html 2. 计算投影点 所以用各种平面提取算法后,得到的平面方程, 注意此处的平面方程abcd已经是 ...

  9. c#垂直投影法_c#求点到直线的投影点坐标

    点在指定直线的投影点,即过点作一垂直于指定直线的直线,与指定直线的交点即为所求.这个问题其实回归到两条垂直直线的交点问题,回到最原始的初中几何知识,复习下 如图示 首先我们明确下已知条件,指定直线上任 ...

最新文章

  1. python映射类型-Python 的映射数据类型有哪些?零基础小白入门学习必看
  2. JVM -- Java虚拟机
  3. mac用vscode打开html,Mac 命令行打开VsCode
  4. 计算机论文搜索技巧【二】
  5. CSS中盒子模型、嵌套盒子中垂直外边距塌陷问题解决方案、标准盒模型、怪异盒模型
  6. c语言测试1到3章,c语言谭浩强第1章至第3章测试试题
  7. c语言强制停止程序,C语言实现程序的暂停
  8. c3p0连接池配置及实现详解
  9. sdk环境变量配置失败问题
  10. 印象笔记 离线版_印象笔记pc版离线
  11. P2114 起床困难综合症
  12. LCD点阵液晶多级菜单设计
  13. 如何避免软件行业的薪资天花板?
  14. 网络实名认证接口认证形式有哪些?
  15. java pdf 修改内容_生成PDF全攻略之在已有PDF上添加内容的实现方法
  16. apm软件仿真+QGC地面站 环境搭建
  17. Bitmap图片压缩,大图加载防止OOM
  18. OpenAI祭出120亿参数魔法模型!从文本合成图像栩栩如生,仿佛拥有人类的语言想象力...
  19. 什么样的人适合读博士
  20. Module not found: Error: Can‘t resolve ‘vue-router‘ in ‘E:\sele-shop\src\router‘

热门文章

  1. 学习笔记:IDF 移动端UX设计 1.4 响应式设计vs.适应式设计
  2. 【git报错】unable to resolve reference ‘ORIG_HEAD‘: reference broken
  3. 倍福ET2000侦听器使用
  4. Python源码解读之一 万物皆对象(上)
  5. Ubuntu忘记密码的解决办法
  6. slq clause
  7. “搜狗拼音输入法”软件评价
  8. 091《读懂一本书:樊登读书法》读书笔记
  9. datagridview中读取数据判断+考勤每月上班天数判断
  10. android 混编JsBridge的原理和实现