我正在创造一个小游戏,我有一个光子鱼雷正在从一艘船向目标射击。现在由于鱼雷的速度很慢,如果它们正在移动并且我想解决这个问题,它将永远不会击中任何目标。我已经制定了多个理论并绘制了大量数学资料,以找出实现这一目标的最佳方法,最后我推导出以下内容:
这是一个数据库:
现在唯一的问题是我需要将a线旋转到正确的方向,因为默认情况下它与c线平行,这会扰乱整个方程。有人能帮忙吗?而且,如果你能想出一个更好的方法来找到新的立场,我们非常欢迎你提出建议:)
答案 0 :(得分:2)
看起来游戏是2D。现在,采取所有世界坐标:
Target Position: {xt, yt}
Target Velocity: {vxt, vyt}
Ship Position: {xs, ys}
现在,让我们说你在方向{bx, by}
上击中一颗子弹它是一个方向向量或单位向量。子弹的速度为sb
。因此,在时间t'
中,子弹和目标的空间坐标将为:
Target New Position: {xt + vxt*t', yt + vyt*t'}
Bullet New Position: {xs + bx*sb*t', ys + by*sb*t'} ( bullet starts from ship)
因为,此时子弹和目标必须只在一个位置,然后我们可以说子弹击中了目标。因此,我们可以将新目标位置替换为等于新子弹位置(在时间t'之后):
xt + vxt*t' = xs + bx*sb*t'
yt + vyt*t' = ys + by*sb*t'
正如我之前所说,bx
和by
是方向向量,因此bx^2 + by^2 = 1
(xt + vxt*t' - xs)/(sb*t') = bx
(yt + vyt*t' - ys)/(sb*t') = by
bx^2 + by^2 = 1
因此,在平方并添加它们之后,您将得到:
(yt + vyt*t' - ys)^2 + (xt + vxt*t' - xs)^2 = (sb*t')^2
这是一个带有一个变量的二次方程:t'
解决它,然后你可以找到bx
和by
。