改变正弦函数的相位

时间:2014-08-05 11:09:00

标签: c# math unity3d trigonometry sine

我在Unity游戏中需要一些数学方面的帮助。这是概念: 球使用正弦函数上下移动(蓝线)。在任何时刻玩家都可能想要按空格键并根据红线改变球的方向。例如,我选择了pi / 4。

  • 球必须保存在y轴上的位置
  • 它必须颠倒它的垂直运动。

因此,我认为改变应该是顺利的,没有不自然的跳跃。

简介:

enter image description here

这是我的班级:

public class GoForward : MonoBehaviour
{
    public float speed = 0.1f; // speed of forward motion
    public float amplitude = 5f; // strength of vertical motion
    public float frequency = 5f; // width of spikes of vertical motion

    // Update is called once per frame
    void Update ()
    {
        float phase = 0f; // phase displacement

        if (Input.GetKeyDown (KeyCode.Space))
        {
            // find phase displacement here
        }

        // apply new position to the ball
        float xpos = transform.position.x + speed * Time.deltaTime;
        float ypos = amplitude * Mathf.Sin (frequency * Time.time + phase);
        transform.position = new Vector3 (xpos, ypos, transform.position.z);
    }
}

当然,我认为解决方案最简单,但我的思想无法集中精力。 所以我需要你的帮助,伙计。

我需要在任何时刻找到相位偏移,这样我的所有条件都必须保持。

谢谢!

找到解决方案。非常感谢大家的帮助!

1 个答案:

答案 0 :(得分:2)

对于上半个阶段的给定时间Time.time,到正弦最大值的距离为

dist = Pi/2 - frequency * Time.time

你需要将曲线偏移两倍的距离(上坡,然后下降相同的量)。所以你需要:

if (Input.GetKeyDown (KeyCode.Space))
{
    phase = Pi - 2 * frequency * Time.time - oldPhase;
}

这也适用于后半阶段。