平面和射线交点

设平面 A x + B y + C z + D = 0 ( A 2 + B 2 + C 2 ≠ 0 ) Ax+By+Cz +D=0\left(A^2+B^2+C^2\neq 0\right) Ax+By+Cz+D=0(A2+B2+C2=0),

点 P ( P x , P y , P z ) P(P_x, P_y, P_z) P(Px,Py,Pz)

(1)求点 P P P到平面距离

(2)过点 P P P作直线,方向为 ( D x , D y , D z ) \left(D_x, D_y, D_z\right) (Dx,Dy,Dz),求平面与直线交点

(2)过点 P P P作射线,方向为 ( D x , D y , D z ) \left(D_x, D_y, D_z\right) (Dx,Dy,Dz),求平面与直线交点

解:

(1)这个高中有学过
∣ A P x + B P y + C P z + D ∣ A 2 + B 2 + C 2 \frac{\left|AP_x+BP_y+CP_z +D\right|}{\sqrt{A^2+B^2+C^2}} A2+B2+C2 ∣APx+BPy+CPz+D∣

(2)为了方便,平面法向量 n = ( A , B , C ) \mathbf{n} = \left(A,B,C\right) n=(A,B,C)

直线方向向量 d = ( D x , D y , D z ) \mathbf{d} = \left(D_x,D_y,D_z\right) d=(Dx,Dy,Dz)

直线上的点可以表示为 P + t d P+t\mathbf{d} P+td,其中 t ∈ R t\in \mathbb{R} t∈R

1.若 n ⋅ d ≠ 0 \mathbf{n}\cdot \mathbf{d}\neq 0 n⋅d=0,则直线和平面有且仅有1个交点

由于 P + t d P+t\mathbf{d} P+td在平面上,因此
n ⋅ ( P + t d ) + D = 0 ⇒ t = − D + n ⋅ P n ⋅ d \mathbf{n}\cdot\left(P+t\mathbf{d}\right) +D = 0\Rightarrow t= -\frac{D + \mathbf{n}\cdot P}{\mathbf{n}\cdot \mathbf{d}} n⋅(P+td)+D=0⇒t=−n⋅dD+n⋅P

进而交点坐标
P + t d = P − D + n ⋅ P n ⋅ d d = ( P x − ( A P x + B P y + C P z + D ) A D x + B D y + C D z D x P y − ( A P x + B P y + C P z + D ) A D x + B D y + C D z D y P z − ( A P x + B P y + C P z + D ) A D x + B D y + C D z D z ) \begin{aligned} P+t\mathbf{d} & = P -\frac{D + \mathbf{n}\cdot P}{\mathbf{n}\cdot \mathbf{d}}\mathbf{d}\\ &=\begin{pmatrix}P_x - \frac{\left(AP_x+BP_y +CP_z+D\right)}{AD_x +BD_y+CD_z}D_x\\ P_y - \frac{\left(AP_x+BP_y +CP_z+D\right)}{AD_x +BD_y+CD_z}D_y\\ P_z - \frac{\left(AP_x+BP_y +CP_z+D\right)}{AD_x +BD_y+CD_z}D_z\\ \end{pmatrix} \end{aligned} P+td=P−n⋅dD+n⋅Pd= Px−ADx+BDy+CDz(APx+BPy+CPz+D)DxPy−ADx+BDy+CDz(APx+BPy+CPz+D)DyPz−ADx+BDy+CDz(APx+BPy+CPz+D)Dz

2.若 n ⋅ d = 0 \mathbf{n}\cdot \mathbf{d}= 0 n⋅d=0,且 n ⋅ P + d = 0 \mathbf{n}\cdot P +d = 0 n⋅P+d=0,则直线与平面重合

3.若 n ⋅ d = 0 \mathbf{n}\cdot \mathbf{d}= 0 n⋅d=0,且 n ⋅ P + d ≠ 0 \mathbf{n}\cdot P +d \neq 0 n⋅P+d=0,则直线与平面无交点

(3)与(2)类似

射线上的点可以表示为 P + t d P+t\mathbf{d} P+td,其中 t ∈ R + t\in \mathbb{R}_{+} t∈R+

依然可以得到 t = − D + n ⋅ P n ⋅ d t= -\frac{D + \mathbf{n}\cdot P}{\mathbf{n}\cdot \mathbf{d}} t=−n⋅dD+n⋅P

1.若 n ⋅ d ≠ 0 \mathbf{n}\cdot \mathbf{d}\neq 0 n⋅d=0且 t < 0 t<0 t<0则无交点

2.若 n ⋅ d ≠ 0 \mathbf{n}\cdot \mathbf{d}\neq 0 n⋅d=0且 t ≥ 0 t\ge0 t≥0,则只有一个交点
P + t d = P − D + n ⋅ P n ⋅ d d = ( P x − ( A P x + B P y + C P z + D ) A D x + B D y + C D z D x P y − ( A P x + B P y + C P z + D ) A D x + B D y + C D z D y P z − ( A P x + B P y + C P z + D ) A D x + B D y + C D z D z ) \begin{aligned} P+t\mathbf{d} & = P -\frac{D + \mathbf{n}\cdot P}{\mathbf{n}\cdot \mathbf{d}}\mathbf{d}\\ &=\begin{pmatrix}P_x - \frac{\left(AP_x+BP_y +CP_z+D\right)}{AD_x +BD_y+CD_z}D_x\\ P_y - \frac{\left(AP_x+BP_y +CP_z+D\right)}{AD_x +BD_y+CD_z}D_y\\ P_z - \frac{\left(AP_x+BP_y +CP_z+D\right)}{AD_x +BD_y+CD_z}D_z\\ \end{pmatrix} \end{aligned} P+td=P−n⋅dD+n⋅Pd= Px−ADx+BDy+CDz(APx+BPy+CPz+D)DxPy−ADx+BDy+CDz(APx+BPy+CPz+D)DyPz−ADx+BDy+CDz(APx+BPy+CPz+D)Dz

3.若 n ⋅ d = 0 \mathbf{n}\cdot \mathbf{d}= 0 n⋅d=0,且 n ⋅ P + d = 0 \mathbf{n}\cdot P +d = 0 n⋅P+d=0,则直线与平面重合

4.若 n ⋅ d = 0 \mathbf{n}\cdot \mathbf{d}= 0 n⋅d=0,且 n ⋅ P + d ≠ 0 \mathbf{n}\cdot P +d \neq 0 n⋅P+d=0,则直线与平面无交点

参考:
https://zhuanlan.zhihu.com/p/404311333

相关推荐
董董灿是个攻城狮3 小时前
AI视觉连载8:传统 CV 之边缘检测
算法
小黎14757789853649 小时前
OpenClaw 连接飞书完整指南:插件安装、配置与踩坑记录
机器学习
AI软著研究员10 小时前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish11 小时前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
哥布林学者11 小时前
高光谱成像(二)光谱角映射 SAM
机器学习·高光谱成像
颜酱12 小时前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
哥布林学者1 天前
高光谱成像(一)高光谱图像
机器学习·高光谱成像
地平线开发者1 天前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮1 天前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者1 天前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶