我需要創建一個彈跳在弧形屏幕上的彈簧杆。我在想,做這件事的最好方法就是把它放在正弦波上。如果波的頂部是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