gam*_*v85 1 c++ math trigonometry formula wave
我需要创建一个以弧形跳过屏幕的弹簧单高跷.我当时认为最好的方法是将它移到一个正弦波上.如果波的顶部是1,地面是0并且波的底部是-1,那么每次它达到0时我将重置值以再次开始正弦波.因此,不是遵循典型的正弦波(0,1,0,-1,0等),而是会出现0,1,0,1,0等.
不幸的是,我的数学非常糟糕,而且我已经花了好几个小时来开发一个公式.目前我正试图制造一个普通的正弦波,其中上半部分模拟跳跃的弹簧跳弹,似乎甚至无法达到那么远.我最接近的是:
m_vel.x++;
float f = PI / 30 / 2;
m_vel.y = 200 * sin(f * m_vel.x);
m_vel.y = -m_vel.y;
Run Code Online (Sandbox Code Playgroud)
我需要波浪很窄,高点要高得多.上面的公式在第一次迭代时开始,但随后波浪变宽,高点和低点彼此接近.任何人都可以帮助数学菜鸟吗?
不确定你的数学,你的物理需要一些刷牙!弹簧棒是弹丸运动的一个例子,它的轨迹形成一个抛物线,用二次方程描述.
但是你应该坚持使用不正确的正弦模型:正弦波的"上半部分"(或正)部分从0到pi弧度.正弦仅表示y项(高度),您不应该在那里有x项,它只是确定每个点的水平步长.你有200的地方,表示弹簧高跷将达到的最大高度:
height = max_height * sin( theta ) ;
Run Code Online (Sandbox Code Playgroud)
其中0 <= theta <= pi,并随时间递增.增量的大小将由前进速度或总跳跃距离确定.
theta_step = pi / jump_distance ;
Run Code Online (Sandbox Code Playgroud)
所以当你达到pi弧度时,你将被jump_distance移动.在跳跃瞬时距离(因此图中的x值)将是:
distance = jump_distance / theta ;
Run Code Online (Sandbox Code Playgroud)