红点在绿点方向以400的速度移动 我想在黄点到达位置所需的时间之后将黄点移动到红点的坐标。
换句话说,我希望黄点在红点到达绿点坐标之前截取红点以使它们重叠。
我使用此功能来获取点之间的距离:
function getDistance(a, b) {
return Math.sqrt(Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2));
}
这个考虑到速度来规范距离:
function normalizeDistance(distance, speed) {
return distance / speed;
}
但我无法了解如何获取所需信息。
我在逻辑上知道3个点的坐标,我知道红点将位于绿色点的坐标中。
绿点是静态的。
我该怎么办?
修改:
澄清一下,这是同一问题的简单例子:
答案 0 :(得分:1)
一种选择是缩小范围,直到你得到一个足够接近"答案。
首先弄清楚黄色到达红色所需的时间。在那个时候,Red当然会走向Green,但那没关系。
弄清楚如果Yellow已经离开红色的地方需要多长时间。
这可能会更长(如果红色通常远离黄色)或者可能更短(如果红色通常朝向黄色移动)。
无论哪种方式,使用它来确定Red最终的位置并获得新目标。继续调整新目标,直到你足够接近"对红色来说是可以接受的。
带有配置选项的一般的想法是(伪代码):
epsilon = 0.01
red_angle = Math.atan2(green.y - red.y, green.x - red.x)
target = {x:red.x, y:red.y}
distance = pythagoras(target.x - yellow.x, target.y - yellow.y)
time = distance / yellow.speed
redmoved = time * red.speed
newtarget = {
x: red.x + redmoved * Math.cos(red_angle),
y: red.y + redmoved * Math.sin(red_angle)
}
delta = pythagoras(target.x - newtarget.x, target.y - newtarget.y)
// repeat while delta > epsilon or after a reasonable maximum number of steps