【发布时间】:2010-11-05 09:50:52
【问题描述】:
我需要创建一个在屏幕上以弧形跳跃的弹簧杆。我在想最好的办法是把它移到一个罪波上。如果波的顶部为 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;
我需要波浪非常窄,高点非常高。上面的公式在第一次迭代时开始正常,但随后波浪变宽,高点和低点彼此靠近。任何人都可以帮助数学菜鸟吗?
【问题讨论】:
-
您可能需要考虑使用parabola,因为这就是实际发生的情况。
-
如果你只想得到一个正弦波,所有的负波峰都被正波峰替换,你可以使用绝对值函数,如
abs(sin(...))。不过,从你问题的第二部分来看,我不确定这是否真的是你想要的。 -
我建议你试试 Cliffords 的回答,因为如果你一步一步做的话,它的实现非常简单。只需跟踪位置速度和重力。对于每一步,您将 x 和 y 速度添加到 x 和 y 位置 + 将重力添加到 y 速度。如果 (y
标签: c++ math formula trigonometry wave