弹跳图的等式?

我基本上希望我的相机在3D中自动移动。 目前我的线性运动很笨,所以我想做一个弹跳运动。

但是,什么是反弹的好方程? 我的意思是,对于一个圆圈你可以做y = sqrt(1 - x^2) ,但是如果我有一个弹跳图,相应的公式是什么? 我想这是与abs的东西,因为它必须“反弹”。 就像(我用Paint做的): 弹跳图

什么是导致这样一个图表的好方程? 我想我可以自己做的转换,但我只是在寻找这样的方程式。

Solutions Collecting From Web of "弹跳图的等式?"

使用graphics方程将无助于将自然的加速度应用于系统。 您可能会惊讶地发现,在这里简单地使用基本的牛顿方程是多么容易。 给物体一点点的质量和动量,让重力和牛顿处理加速度和位置的变化。 这比你想象的要容易得多

我不想提供直接的答案,而是要指出正确的方向。 如果你的谷歌AI为移动实体,你会发现algorithm使用像速度,质量,速度和加速度的variables。 如果你把引力join到方程中,你应该得到真实的行为。

正如其中一个对你的问题的评论所述,这并不复杂。

我推荐编程游戏AI的例子 ,我发现非常有帮助。

我还发现这个链接解释了一个弹跳球所涉及的力量。

如果你的运动看起来很像你的graphics,你可以利用这样一个反弹缓和方程( 来源 ):

 // BOUNCE EASING: exponentially decaying parabolic bounce easeOutBounce = function (t, b, c, d) { if ((t/=d) < (1/2.75)) { return c*(7.5625*t*t) + b; } else if (t < (2/2.75)) { return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; } else if (t < (2.5/2.75)) { return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; } else { return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; } }; easeInBounce = function (t, b, c, d) { return c - Math.easeOutBounce (dt, 0, c, d) + b; }; 

这个动作看起来在这个图(easeIn)中: 反弹缓解

如果你想弹跳,那么看看恢复系数 。 这是介于0和1之间的值,表示相机的“不平衡”。 值为0意味着当物体与地面碰撞时不会发生弹跳,1表示相机在与地面相撞(在这种情况下)将会弹回到原来的高度。

实现它的最简单的方法是给你的相机一个初始的速度vector(称之为u),并且你想在相机碰撞后find最终的速度vector(让它叫v)。 让我们打电话给CoR e。

e = v / u

所以你所需要做的就是将你的初始速度乘以系数,否定这个速度(它向相反的方向行进),瞧,你有最后的速度,如果你每次碰撞都继续这样做,你的弹跳动作。 这是假设你有一个平面,你想要反弹,如果你有一个复杂的网格碰撞,然后而不是否定vector,只需乘以你碰撞的多边形的法线(这本质上什么否定在平面上做)。

使用某种位置更新function(Euler,Verlet甚至RK4 – 见这个链接 ),这将使这个任务变得更容易。

希望有帮助(我希望我的math不是太远:P)

如果你正在寻找一个近似的方程,但粗略地描述一个反弹,你可以尝试:

 y=(e^-x)*abs(4cos(5x)) 

哪里

  • “4”是下降和随后反弹高度的系数,
  • “5”是反弹的频率,而
  • “abs”部分是为反弹的下半部分提供一个尖锐的轨迹。