礼拜一-礼拜五:09.00 早上-06.00 下午

游戏动态

高速移动的圆形物体会不会在两帧之间相撞:十组相对运动的最近距离(实例21)

2026-11-06

只检查一帧开头和结尾,可能漏掉中间发生的接触。两个圆形物体都在运动时,可以先减去其中一个的运动,把问题变成一个相对位置沿直线移动的圆。

固定规则与输入

时间范围零至一,初始相对位置为p,相对位移为v,两圆半径和为R。考察p加tv的长度平方,取整个时间段最小值,再与R平方比较,等于也算接触。

十组独立实验,时间均为零至一;最近时刻不等于首次接触时刻。

逐步观察结果

实验1相对初位[-10, 0]、位移[20, 0]、半径和3,最近时刻1/2,该时刻相对位置['0', '0'],距离平方0;两端距离平方[100, 100],整个时段接触True。

实验2相对初位[6, 2]、位移[0, 0]、半径和2,最近时刻0,该时刻相对位置['6', '2'],距离平方40;两端距离平方[40, 40],整个时段接触False。

实验3相对初位[8, -6]、位移[-1, 0]、半径和4,最近时刻1,该时刻相对位置['7', '-6'],距离平方85;两端距离平方[100, 85],整个时段接触False。

实验4相对初位[-10, 1]、位移[8, 0]、半径和3,最近时刻1,该时刻相对位置['-2', '1'],距离平方5;两端距离平方[101, 5],整个时段接触True。

实验5相对初位[-6, 0]、位移[5, -3]、半径和1,最近时刻15/17,该时刻相对位置['-27/17', '-45/17'],距离平方162/17;两端距离平方[36, 10],整个时段接触False。

实验6相对初位[-10, -1]、位移[2, 10]、半径和2,最近时刻15/52,该时刻相对位置['-245/26', '49/26'],距离平方2401/26;两端距离平方[101, 145],整个时段接触False。

实验7相对初位[-2, -7]、位移[8, 10]、半径和4,最近时刻43/82,该时刻相对位置['90/41', '-72/41'],距离平方324/41;两端距离平方[53, 45],整个时段接触True。

实验8相对初位[-1, -10]、位移[11, -10]、半径和5,最近时刻0,该时刻相对位置['-1', '-10'],距离平方101;两端距离平方[101, 500],整个时段接触False。

实验9相对初位[-10, -2]、位移[11, -9]、半径和1,最近时刻46/101,该时刻相对位置['-504/101', '-616/101'],距离平方6272/101;两端距离平方[104, 122],整个时段接触False。

实验10相对初位[9, -10]、位移[11, 9]、半径和2,最近时刻0,该时刻相对位置['9', '-10'],距离平方181;两端距离平方[181, 401],整个时段接触False。

第一组专门展示两端都分离、中间却相遇的情况,第二组检验相对静止。距离平方可以直接比较,避免为判断是否接触而引入不必要的开方。

独立复核

长度平方是二次函数。若相对位移不为零,候选时刻为负的p与v点积除以v的长度平方,再限制到零至一。复核时应比较候选点与两个端点,并区分起初就重叠与途中才接触。

复核时先保留本例输入,再自己写出中间状态。若结果不同,应从最早出现差异的位置检查,尤其留意边界是否包含、索引从哪里开始、取整何时发生,以及是否使用了尚未更新的旧状态。计算得到的结论仅适用于已经说明的规则,修改规则后需要重新验证。

适用范围

这个模型只处理匀速圆形轮廓,不计算碰撞后速度,也不求首次接触的精确时间。加速、旋转或不规则轮廓需要其他处理,不能直接把本例的最近时刻当成碰撞发生时刻。