C# 正弦函数的相位变化

C# 正弦函数的相位变化,c#,math,unity3d,trigonometry,C#,Math,Unity3d,Trigonometry,在我的统一游戏中,我需要一些数学方面的帮助。这是一个概念: 球使用正弦函数上下移动(蓝线)。在任何时刻,球员都可能想按空格键并根据红线改变球的方向。例如,我选择了pi/4 球必须保留其在y轴上的位置 它必须反转它的垂直运动 因此,我认为这种变化应该是平稳的,没有不自然的跳跃 绘图: 这是我的班级: public class GoForward : MonoBehaviour { public float speed = 0.1f; // speed of forward motio

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

  • 球必须保留其在y轴上的位置
  • 它必须反转它的垂直运动
因此,我认为这种变化应该是平稳的,没有不自然的跳跃

绘图:

这是我的班级:

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);
    }
}
当然,我认为解决办法是最简单的,但我的头脑不能集中精力。所以我需要你们的帮助,伙计们

我需要找到任何时刻的相位位移,以便所有条件都保持不变。

谢谢


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

对于给定时间
time.time
的前半相位,到正弦最大值的距离为

dist = Pi/2 - frequency * Time.time
需要将曲线偏移两倍的距离(上坡,然后下坡,偏移量相同)。因此,您需要:

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

这也适用于下半阶段。

您有实际问题吗?在任何地方都看不到问号。你需要帮助的代码到底有什么问题?JK,“我需要找到任何时刻的相位位移,这样我的所有条件都必须成立。”所以我的问题是:任何时刻的相位值是多少?我需要公式,这样我可以把它放在我的代码里。或者,如果你已经明白我想要什么,如果你有更好的实现相同结果的概念:请,首先,我有点想知道为什么你用sin来代替简单的抛物线,但这并不重要——如果你想让它立刻变得像样,你就不能有一个平滑的效果——但是如果我说对了,你只想在山的另一边有相同的y,对吗?sin的最大值为0.5Pi,因此非常简单:您正在寻找
Pi-t
(…这是您的阶段取决于
t
!)。。。是的,这只适用于sin的正部分(谢谢,@CarstenKönig!我试过Pi-t,但正如你所说,它只在某些情况下有效。我应该解一些方程,对吗?所以,蓝线代表f(x)=sin(x+p_1),其中p_1是任意起始阶段。红线代表g(x)=sin sin x+p_2)对吗?我需要p_2。y必须相等,所以f(x)=g(x),换句话说,sin(x+p_1)=sin(x+p_2),对吗?这是第一个方程。我需要反转运动,所以导数必须有不同的符号。所以我们有sin'(x+p_1)>=sin'(x+p_2),f(x)>=0;和sin'(x+p_1)sin具有相同值的点不多(在区间[0..2pi]-但它是非常周期性的)-在我看来,你不需要知道它的导数,相位只是沿x轴平移sin,如果你不做更多的事,你就得到了天真的
sin(x)=sin x(x+2pi)
我给你的一对值和另一对值一起
3/2*pi
Yahoo!很好!解决了我的问题。非常感谢!