我正在寻找一个抛物线的基本Javascript实现,它遵循一个抛物线弧(或接近一个的东西)到达一个特定的点。在复杂的数学方面我并不是特别精通,而且花了几天时间阅读有关问题的材料。不幸的是,看到数学解决方案对我来说毫无用处。我理想地寻找伪代码(甚至现有的示例代码)来试图理解它。我发现的一切似乎只能为问题提供部分解决方案。
实际上,我希望模拟箭头从一个位置(弓的位置)到另一个位置的飞行。我已经通过在每个逻辑间隔更新其速度来模拟重力对我的射弹的影响。我现在要弄清楚的是,我是如何找出正确的轨迹/角度来射箭,以便在最短的时间内达到我的目标。
非常感谢任何帮助。
答案 0 :(得分:4)
我不是物理学家所以我所能做的就是告诉你一种基于非常简单的过程的方法。
现在你需要解决的一个细微差别是“vy”的标志。 “vy”的初始标志应与“delta vy”相反。哪个应该是正数,哪个应该是负数取决于坐标网格与屏幕的关系。
编辑 - 请参阅@ Alnitak的回答,了解与您的问题密切相关的内容。
答案 1 :(得分:4)
Pointy的答案很好地总结了如何在给定初始轨迹的情况下模拟物体的运动(其中轨迹被认为是方向,以及速度 ,或组合使用 vector )。
但是你在问题中说过(如果我没有正确读到你)你想要确定初始轨迹,只知道原点O
和目标目标点P
。
坏消息是,在任何特定P
的实践中,都会有无数个抛物线轨迹从O
到达那里。角度和速度是相互依赖的。
如果我们翻译所有内容以便O位于原点(即[0,0]),那么:
T_x = P_x - O_x // the X distance to travel
T_y = P_y - O_y // the Y distance to travel
s_x = speed * cos(angle) // the X speed
s_y = speed * sin(angle) // the Y speed
然后,任何时间点(x, y)
的位置(t)
为:
x = s_x * t
y = s_y * t - 0.5 * g * (t ^ 2)
所以影响你已经
了T_x = s_x * t
T_y = -0.5 * g * (t ^ 2) + s_y * t
但您有三个未知数(t
,s_x
和s_y
)和两个联立方程式。如果你修复其中一个,那就足以解决方程式。
FWIW,修复s_x
或s_y
相当于修复speed
或angle
,这一位只是简单的三角函数。
某些组合当然是不可能的 - 如果速度太低或角度太高,弹丸会在到达目标之前撞到地面。
注意:这假定持续评估的位置。根据Pointy的回答以及您自己对模拟运动的描述,它与离散增量的时间过去时发生的情况不太匹配。如果你足够频繁地重新计算位置(即每秒10次),它应该足够准确。