[几何检测]

2019-10-09  本文已影响0人  想变的很强的日向彻


1.2D隐式直线上的最近点

直线L:p*n = d, 距离直线L上的一点q最近的点q1 = q + (d - q*n)n;

和直线平行的为q*n = Dm,n为法向量,简单解释就是,将q沿着法向量方向移动d-dm个单位距离

2.参数射线上的最近点

射线L: p(t) = Porg + td;向量投影,即需要求出t,t是一个向量在另外一个向量上的投影,

3.平面上的最近点

同1,隐式直线上的最近点

4.圆或球上的最近点

qm = q + (||d|| - r) * d / ||d||,圆或球外一点距离最近的点(到圆心的距离和半径的比例)

5.AABB上的最近点

AABB有两个特别特殊的点,Pmin和Pmax,x,y,z的三个范围值

6.相交性检测

静态检测:检测两个静止图元是否相交

动态测试:检测两个运动图元是否相交,这个值不是唯一的,而是一个和时间有关的动态的结果,即可能在某一个时间点相交,但还可能是在另外一个时间点不相交

7.在2D中两条隐式直线的相交性检测

两条直线的方程组求解

8.在3D中两条射线的相交性检测

9.射线与平面的相交性检测

10.AABB和平面的相交性检测

用AABB的八个顶点和平面的法向量进行点积,比较结果如果都大于0或者小于0,则说明在平面的一侧,如果有的大于0有的小于0,这说明平面穿过了AABB,八个顶点不必都进行检测,可以进行优化

11.三个平面的相交性检测

三个平面的向量表示的方程求解,根据分母是否为0判断有多少交点

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

计算球心或者圆心到射线的距离和半径进行比较,能知道射线是否和圆相交

13.两个圆/球的相交性检测

静止:圆心或者球心的距离和半径和作比较

动态:将其中一个看成不动的,将两个运动向量组合

14.球和AABB的相交性检测

AABB和球心最近的点和半径作比较

15.球和平面的相交性检测

球心到平面的距离和半径作比较

16.射线和三角形的相交性检测

计算出射线和三角形平面的交点,判断这个点是否在三角形内

tips:今早的进行一些检查,early out,昂贵的计算尽可能延迟调用和计算

17.射线和AABB的相交性检测

先判断射线会和哪个面相交,再通过射线和面的相交性检测来判断

18.两个AABB的相交性检测

静止比较好判断,运动的要将他投影到某个轴上,也就是降维

19.OBB判断两个AABB是否相交

两个凸包多边形,当且仅当存在一条线,这两个多边形在这条线上的投影不相交,则这两个多边形也不相交.

上一篇下一篇

猜你喜欢

热点阅读