对于我在大学的数学系,我们必须手动计算球体是否与胶囊对撞机相撞。
我要处理的信息是这个
您拥有以下Sphere:
LadyBird3-CentrePoint =(0,0,0),Radius = 18.0 还有以下胶囊
Sanic-BottomPoint =(0,2,6),TopPoint =(0,12,6),Radius = 5.0 确定是否发生以下成对冲突:
Sanic和LadyBird3 在我们的演讲中,我们被告知以下内容;
注意:在此步骤进行规范化并不重要
首先,我们要检查AC和AB的点积
如果该点积小于0,则表示从线段到C的最近点是A
所以我们可以返回AC的平方长度并停止任何进一步的计算
现在我们对BA和BC的点积进行相同的测试
再次,如果点积小于0,则B将是线段上最接近C的点,因此我们只返回BC的长度并停止任何进一步的计算。
投影...如果线段的两个点的点积返回> 0,我们需要将C投影到AB上以获得距离。如果这是我们关心的全部问题,则有一种有效的方法来获取平方距离:
SquaredDistance = AC.LengthSq-(AC。AB)*(AC。AB)/ AB.LengthSq
在此处执行点积运算时,我们需要确保其未标准化。
最后一步是使用该平方距离并将其与两个半径平方之和进行比较,以确定是否存在相交。
因此,我正在尝试计算它们是否相交或不使用上面的信息。
我所能想到的就是这个(从Sanics职位(TP,BP)中删除LadyBird3职位)
AC =(0,2,6)
AB =(0,-10,0)
点积= -20
BA =(0,10,0)
BC =(0,12,6)
点积= 120
感觉到我得到的值不正确,或者我正在执行的过程是错误的……有人能指出我正确的方向吗?