冲突检测中的接触公差


Mstn冲突检测功能的高级设置中有一个名为“接触公差”的输入项,如下图所示:

通过这个输入值我们可以控制在冲突检测后台处理过程中,判断两个体元素是否有相交时的公差,即当两个体元素相交部分的大小超过指定的临近值时才会认为是发生了碰撞。那么这里指定的“接触公差”到底是如何影响后台的处理过程,或者后台程序是如何使用这个值呢?经过反复测试后台程序处理过程是这样的,首先会判断两个元素的AABB包围盒(有关AABB包围盒的概念读者可自行在网络搜索引擎中查找相关资料学习,这里不再赘述)是否有相交,如果包围盒不相交的话,就认为两个元素之间没有冲突,结束处理。如果AAB包围盒相交的话,会将参与判断的两个元素的所有面向元素“体内”偏移“接触公差”的一半,然后再计算所有面偏移后两个元素是否真正相交。如果此时仍然有相交,则在结果中会有这两个元素冲突的条目。

在使用“接触公差”这个设置来调整检测冲突的过程时,我们需要特别注意一种情况就是在元素的厚度特别小的时候。例如下图所示的这两个长方体:

这两个长方体在X轴方向上的长度均为20毫米,假如我们把“接触公差”设置为超过40毫米的值,那么蓝色长方体左边平行于yoz的面会朝+X轴方向偏移“接触公差”的一半,而绿色长方体右边平行于yoz的面会朝-X轴方向偏移“接触公差”的一半。此时偏移后的两个长方体就会出现冲突。显然这样的结果是不对的。所以我们在使用“接触公差”这个值时要特别注意这一点。