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