我需要创建一个弹跳在弧形屏幕上的弹簧杆。我在想,做这件事的最好方法就是把它放在正弦波上。如果波的顶部是1,地面是0,波的底部是-1,那么每次碰到0时,我会重置这些值以再次开始正弦波。因此,不是遵循典型的正弦波(0,1,0,1,0等),而是遵循0,1,0,1,0等。C++正弦波跳跃弹跳公式
不幸的是,我的数学很糟糕,我一直在尝试几个小时来开发一个公式。目前,我只是试图制造一个正常的正弦波,上半部分模仿跳弹簧跳跃,似乎甚至没有那么远。我最接近的是:
m_vel.x++;
float f = PI/30/2;
m_vel.y = 200 * sin(f * m_vel.x);
m_vel.y = -m_vel.y;
我需要波浪很窄,高点要相当高。上面的公式从第一次迭代开始就OK了,但是波浪变宽了,高点和低点彼此接近。任何人都可以帮助数学noob出来吗?
你可能要考虑一个[抛物线(http://en.wikipedia.org/wiki/Parabola)代替,因为这是实际发生的情况。 – 2010-11-05 09:55:46
如果你只是想得到一个正弦波,所有的负峰都被正峰代替,你可以使用绝对值函数,就像在abs(sin(...))中一样。但是,从问题的第二部分来看,我不确定这是否是您想要的。 – Hammerite 2010-11-05 09:59:43
我建议你试试Cliffords的答案,因为它有一个非常简单的实现,如果你一步一步做。只需跟踪位置速度和重力。对于每一步,您将x和y速度添加到x和y位置+将重力添加到y速度。然后你只要改变Y速度的迹象,如果(y <= 0)y_vel = - y_vel; – 2010-11-05 10:39:37