我想优化我的算法之一,我将尝试以最佳方式解释它.
我们在t = 0时处于2D欧几里得系统中.在这个系统中有两个对象:O1和O2.
O1和O2分别位于PA和PC点.
O1以点PB的方向以恒定且已知的速度移动.当物体到达PB时,物体将停止.
O2可以在任何方向上以不同或不同的O1的恒定和已知速度移动.在时间0,O2 没有方向,我们需要为它找到一个.
知识参数:
这是系统的一个小图.

我们希望找到点PI和时间ti : Position of O1 at the time ti = Position of O2 at the time ti = PI. 然后我们将使对象O2移动到点P1以获得O2方向.
当选择O2的方向(点PI)并且两个对象O1和O2都在移动时,对象将永远不会停止或等待彼此.
在这种情况下,结果将是这样的(PI在此图片上标注为D).

你可以在这个jsfiddle找到用JS编写的工作算法,它也是理解这个问题的好方法.
这时我使用的是一个简单的算法,但是可以进行大量的操作,我会获得最佳的交叉时间,然后获得交叉位置.
为了得到这个时间,我会在一刻检查O1的位置,并检查此时O2是否可能到达此位置.如果O2无法及时到达物体,我们会将时间增加150%,但是如果O2当时可以越过O1-B线,我们将把时间缩短50%.
最终,经过多次近似,我们将找到两个物体相遇的最佳时间.
伪代码
function getOptimalIntersectionTime time
if distance …Run Code Online (Sandbox Code Playgroud)