Skip to content

圆/球与其他图元

与射线

参考射线与圆/球

与平面

参考平面与圆/球

与AABB

这点和平面与球的相交性测试中计算思想相同

与圆/球

分为两种情况,分别是静态和动态

静态

思想是计算出两个球心之间的距离,比较距离和两球心半径之和的大小,假设两球心距离为d,半径分别是r1r2

  • d < r1r2,相交
  • d = r1r2,相切
  • d > r1r2,不相交

在实践中经常使用平方进行比较,减少了一次取平方根的运算

d2 < (r1 + r2)2

动态

假设两个球的位移向量分别是d1、d2,为了简化讨论,我们将球1认为是“静止的”,两个球体的运动简化为球1相对于球2运动。

img.png

那么球2的位移向量为d = d2 - d1,需要将方向向量d标准化,t的取值范围为0到l

运动球的球心为cm,半径为rm,那么t时刻,它会运动到cm + td 位置,目标是计算出相交时刻t

静止球的球心为cs,半径为rs

img.png

已知以下等式

r=rs+rme=cscm

根据cos定理有

r2=t2+e22tecosθ

简化为

t22(e·d)t+e·er2=0

根据二次求根公式解得

t=2(e·d)±(2(e·d))24(e·er2)2

简化后为

t=(e·d)±(e·d)2e·e+r2

其中,较小的值是初次接触相交时的t值,较大的值是脱离接触时的t值

  • 如果向量e的模长 < r,则球在t=0时刻就相交了
  • 如果t < 0或t > l,那么两个球不会相交
  • 如果根号下的值为负数,那么两个球不会相交