摘要

本文内容包括:

  • 三维空间中射线与平面的表示方法,
  • 三维空间中判断射线与平面是否相交。

文末参考链接的资料都不错,但总漏点东西,所以把它们说总结到了一起。


三维空间中射线的表示方法

射线可以用三个量来表示:射线的起始点、射线的方向向量以及射线的长度。

如图所示的射线的参数方程为:
P(t)=P0′+tu⃗P(t) = P_0^{'} + t \vec{u} P(t)=P0′​+tu
其中,P(t)P(t)P(t)为射线上的点,其所有可能的结果构成了整条射线;P0′P_0^{'}P0′​是射线的起点,u⃗\vec{u}u 为射线的方向向量,ttt为射线的长度且t∈[0,∞)t∈[0,∞)t∈[0,∞)

三维空间中平面的表示方法

平面可以用二个量来表示:平面上任一点,过该点的平面法向量。

如图所示的平面的参数方程为:
(P−P0)n⃗=0(P - P_0)\vec{n} = 0 (P−P0​)n=0
其中,PPP为变量,其所有可能的结果组成了这个平面;P0P_0P0​为平面上已知的某一点,n⃗\vec{n}n为平面上过已知点P0P_0P0​的法向量。
公式的物理意义为:(P−P0)(P - P_0)(P−P0​)表示平面上的向量,其与平面法向量n⃗\vec{n}n总是垂直的,故它们之间的内积为0.

三维空间中射线与平面是否相交的判断方法

射线不同于直线,射线存在起始点和方向,它与平面存在3种情况:

  1. 射线与平面平行。这时候肯定不相交。
  2. 射线与平面不平行。但平面在射线负方向,这时候也不相交。
  3. 射线与平面不平行。且平面在射线正方向,这时候射线与平面相交。

下面分情况讨论。
n⃗u⃗=0\vec{n}\vec{u} = 0nu=0时,表示射线与平面平行,这时候肯定不相交。
n⃗u⃗≠0\vec{n}\vec{u} \neq 0nu​=0时,表示射线与平面不平行,这时候射线所在的直线与平面必定相交于一点,记该点为P(t)P(t)P(t),那么有:
(P0−P(t))n⃗=0(P_0 - P(t))\vec{n} = 0 (P0​−P(t))n=0
带入射线参数方程P(t)=P0′+tu⃗P(t) = P_0^{'} + t \vec{u}P(t)=P0′​+tu, 有
(P0−P0′−tu⃗)n⃗=0(P_0 - P_0^{'} - t \vec{u})\vec{n} = 0 (P0​−P0′​−tu)n=0
解之得
t=(P0−P0′)n⃗u⃗n⃗t = \frac{(P_0 - P_0^{'})\vec{n}}{\vec{u}\vec{n}}t=un(P0​−P0′​)n​注意,这里是向量点积,所以分子分母的n⃗\vec{n}n不能消掉。
所以我们可以求出射线所在的直线与平面交点
P(t)=P0′+tu⃗=P0′+(P0−P0′)n⃗u⃗n⃗u⃗P(t) = P_0^{'} + t \vec{u} = P_0^{'} + \frac{(P_0 - P_0^{'})\vec{n}}{\vec{u}\vec{n}} \vec{u} P(t)=P0′​+tu=P0′​+un(P0​−P0′​)n​u
那么如何判断射线是否与平面相交呢?
当t>=0t >= 0t>=0时,交点在射线正方向上,所以射线与平面相交,交点即为P(t);
当t<0t < 0t<0时,交点在射线负方向上,所以射线与平面不相交,但射线所在的直线与平面相交。

相关/参考链接

  • 射线与平面相交判断 | 讲得我觉得最好的,但是没有讲分母为0为射线与平面平行的情况
  • 射线与平面相交 | 讲了分母为零的情况
  • 射线、平面的表示方式 | 讲得很简洁,但是有地方没讲清楚

三维空间中判断射线与平面是否相交相关推荐

  1. 检测空间中实心圆与平面是否相交

    问: 三维空间中存在一实心圆和一块无限平面,证明实心圆与平面是否相交. 此题事实上是两个平面相交的问题,一般不平行的两平面相交问题只需要解两平面方程联立的行列式就能得到相交的直线方程了,但是在本题中, ...

  2. 平面中判断线段与矩形是否相交

    文章目录 1. 原理 2. 实现 3. 参考 1. 原理 这个问题的算法思路挺简单的.分成两步来判断: 判断线段的两个端点是否在矩形内,如果两个端点至少有一个在矩形内,说明线段与矩形相交. 如果两个端 ...

  3. 土木搬砖工图形学学习之路——射线与包围盒的相交测试

    本人土木转计算机,目前刚刚开始研究生生涯.最近喜欢上了三维计算机图形学,被射线与包围盒的相交测试函数卡了许久,以下分享一些个人的学习理解. 一.结构体定义 包围盒定义为三维空间中一个立方体,其六个面分 ...

  4. c++中射线表示_射线与球的相交测试

    chopper:目录​zhuanlan.zhihu.com 本节将描述两种射线与球体的相交测试方法,方法一是采用参数方程求解的方法,可以计算出直线.射线.线段与球的交点,方法二在Akenine-Möl ...

  5. 三维空间中的两直线相交

    很多资料上提供的两直线相交求点问题一般都是基于二维空间的,而且是直接使用坐标系进行求解.实际上知道二维空间中的求法(使用坐标系进行求解的),要想从中推导到三维空间中的求法是不容易的.在进行几何问题求解 ...

  6. hdu1174(3维射线与圆是否相交)

    简单的题意,要注意z2 = h2*0.9-r2 #include <iostream> #include <cmath> #include <vector> #in ...

  7. 射线和三角形的相交检测(ray triangle intersection test)

    http://www.cnblogs.com/graphics/archive/2010/08/09/1795348.html 本文以Fast, Minimum Storage Ray Triangl ...

  8. [足式机器人]Part1 三维空间中的跳行Ch03——【Legged Robots that Balance 读书笔记】

    本文仅供学习使用 本文结合个人理解体会作者的思路,也从个人科研角度出发,部分翻译参考由:QQ群(2群legged robot that balance)提供,感谢他们为本文英文版翻译所做的贡献(但有些 ...

  9. 向量叉乘求三维空间中两直线(或线段)的交点

    1.2D空间的直线相交 在二维空间中,利用两个直线方程y = kx + b我们可以直接计算出交点,但是这种方法麻烦了些,并且套用到三维空间用公式就更麻烦了,接下来介绍的是如何利用向量叉乘求出直线交点. ...

  10. MVG读书笔记——三维空间中的射影几何(二)

    直线 通常三维空间中的直线可以由两点的连线或者两平面的相交线确定,但它的表示却比较麻烦. 三维空间中的直线有4个自由度.一个简单的解释是想象在两个正交平面上各取一个点,从而得到一条直线,这两个点各有两 ...

最新文章

  1. linux ip 转发设置 ip_forward
  2. 直播 | WWW 2021论文解读:基于隐私保护的模型联邦个性化
  3. java基准测试_微基准测试进入Java 9
  4. CodeForces512C-Pluses everywhere-模拟/数学/排列组合模板
  5. 从矩阵分解到FM的演进、FM如何用于召回和排序以及实现说明
  6. 在服务中mysql启动不了了_mysql在服务项里无法启动
  7. Web前端工程师修炼之道(原书第4版) 中文pdf扫描版
  8. 如何在通达信软件上随意画图_通达信指标公式编写教程:绘图函数DRAWLINE、DRAWTEXT 等...
  9. 苹果4放入卡还是显示无服务器,iPhone4S不识别SIM卡 官方出解决方法
  10. 光纤通信是不是计算机类的,光纤通信专业属于什么门类
  11. css 背景图片虚化效果
  12. 视频像素、分辨率、清晰度关系及区别
  13. xml 硕正报表_主要指标及功能清单
  14. 蚂蚁金服区块链创新大赛
  15. h.265系列快速操作指南_H2O-快速指南
  16. git patch 使用
  17. 0x80073712_解决Windows 组件存储已损坏,0x80073712错误
  18. word中插入页码方法
  19. Docker 理论以及隔离
  20. 对象认知全提升,成为 JS 高手

热门文章

  1. 手把手教你Tiny4412 Android5.0 定制 按下开发板上的按键通过广播发送到应用层
  2. wpsoffice安卓历史版本_wps office移动版_wps office手机版下载-太平洋下载中心
  3. 交友小程序服务器,又是陌生人交友小程序,探探Lite到底有什么不同?
  4. 悼念著名计算机科学学者孙钟秀院士
  5. postgresql 编写函数实现 获取中文姓名全拼
  6. PMP考试试题是什么样?
  7. Linux中安装WPS
  8. Windows10系统打开程序应用提示『不支持此接口』的解决方案
  9. css3 js 做一个旋转音乐播放开关
  10. c语言饭卡管理系统_C语言饭卡管理系统(附代码) -