我有xy坐标,如(200,200)。我知道从投球的起源开始的角度计算。当在2d环境中投掷球时,如何找到达到特定xy坐标的初始速度?
我使用
x = v0cosq0t;
y = v0sinq0t - (1/2)gt2.
但是需要时间。我没有时间可以做到吗?有什么帮助吗?
答案 0 :(得分:1)
我假设你希望球在其路径的顶点击中特定点(200,200)。好吧,我的物理学有点生疏,但这就是我扔在一起的东西:
v_y = square_root(2*g*y)
,
其中g是反映重力加速度的正数,y是你想要的高度(在这种情况下为200)。
v_x = (x*g) / v_y
,
其中x是你想走x方向的距离(在这种情况下是200),g和以前一样,Vy是我们在上一个等式中得到的答案。
这些方程式无需角度。但是,如果您更喜欢速度+角度,那很简单:
v0 = square_root(v_x^2 + v_y^2)
和
angle = arctan(v_y / v_x)
。
如果您有兴趣,可以使用以下内容:
(1/2)at^2 + v_yt + 0 = y
(1/2)at^2 + v_yt - y = 0
通过二次方程式,
t = (-v_y +/- square_root(v_y^2 - 2ay)) / a
我们还有另一个等式,因为在顶点垂直速度为0:
0 = v_y + at
替代:
0 = v_y + (-v_y +/- square_root(v_y^2 - 2ay))
0 = square_root(v_y^2 - 2ay)
0 = v_y^2 - 2ay
v_y = square_root(-2ay)
或
v_y = square_root(2gy)
对于v_x:
v_x*t = x
,t = v_y / a,所以
v_x = (x*g)/v_y
我希望这足够了。
答案 1 :(得分:0)
我相信你可以假设速度变化是瞬间的。游戏物理中总是有一些“狡猾”的部分,因为它的计算成本太高或者不够重要,无法直接获得低粒度信息。
你可以瞬间启动速度屁股,然后使用计时器类来测量每帧之间的时间(非常粗略的方式),或者你可以在更新循环中设置一个计时器类来更新物理每x秒。