3D数学 学习笔记(11) 几何检测

3D数学 学习笔记(11) 几何检测

参考书籍:
《3D数学基础:图形与游戏开发》


隐式直线上的最近点

任意点q,找到直线 p·n = d 上最近的点q’。

  • d - dM = d - q·n

在这里插入图片描述
在这里插入图片描述


参数射线上的最近点

任意点q,找到射线上p(t) = porg + td 最近点q’。直接点乘做投影即可。

  • t = d·v = d·(q - porg)

在这里插入图片描述
在这里插入图片描述

如果t是从0到1变化,计算t必须除以d的模:

在这里插入图片描述


平面上的最近点

任意点q,找到平面p·n上最近的点q’。a为距离。

  • p + an =q

在这里插入图片描述

在这里插入图片描述


圆或球的最近点

任意点q,找到圆 || p - c || = r 上(边缘)最近点q’。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


AABB上的最近点

直接在判断xyz即可。

在这里插入图片描述


2D中两条直线的相交性检测

即求解方程组:

在这里插入图片描述

三种情况:

  • 一个解:分母不为0。
  • 无解:分母为0,平行且不相交。
  • 无穷多个解:分母为0,两线重合。

在这里插入图片描述


3D中两条射线相交检测

同样解方程组,即 r1(t1) = r2(t2)。

在这里插入图片描述

三种情况:

  • 一个解:分母不为0,即d1、d2叉乘不为0。注意如果两线不在同一平面,求的两个值是相距最近的点。
  • 无解:分母为0,平行。
  • 无穷多个解:分母为0,重合。
    在这里插入图片描述

射线和平面相交性检测

射线p(t) = po + td , 平面p·n = d。

在这里插入图片描述
在这里插入图片描述

四种情况:

  • t > l(射线长度):不相交。
  • l ≥ t >0:相交。
  • t = 0:平行。
  • t < 0:射线原点在面的背后,不相交。

AABB和平面相交检测

AABB由pmin和pmax定义。判断和平面p·n = d相交,只需用平面法向量n点乘AABB的最大最小点即可。

三种情况:

  • min >= d:AABB最小值都在平面之上,说明整个AABB都在平面之上(正面),不相交。
  • max <= d:AABB在平面背面,不相交。
  • 其余情况:相交。

三个平面相交性检测

求解方程组即可。p为相交的点。

在这里插入图片描述

三种情况:

  • 相交于一点:分母不为0。
  • 不存在:分母为0,至少两个平面平行且不重叠。
  • 无穷多个:分母为0,至少两个平面重叠。

射线和圆/球的相交性检测

射线p(t) = po + td,d为单位向量,t范围:[0, l]。求的t为交点处的值。
如果根号内的值为负,则不相交。
在这里插入图片描述
在这里插入图片描述

两种情况:

  • 相交:根号值为非负。
  • 不相交:根号值 为负。

两个圆/球相交性检测

静态测试:直接判断两圆心距离即可。即d2 < (r1 + r2)2

在这里插入图片描述

动态测试:两个球位移分别为d1和d2。简化问题,看成一个静止,另一个运动:位移为d2 - d1

三种情况:

  • ||e|| < r:球在 t = 0时就相交了(运动前两个就相交了)。
  • t < 0 或 t > l:在时间段内不会相交。
  • 根号值为负:两球不相交。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


球和AABB的相交性检测

先找到球心里AABB最近的点(见前面),最近点和球心距离d,比较d和球半径即可。


球和平面的相交性检测

静态测试:直接判断球心和平面距离(见前面),加上一个球半径判断即可。

动态测试:球运动轨迹为c + td。c为圆心,d为方向,t从0变化到l。直接使用射线与平面交点公式(见前面)即可,不过要加上球半径r。
在这里插入图片描述
在这里插入图片描述


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值