【问题标题】:Movement EquationDeltaHeight = (Sin(RunningTime + DeltaTime) - Sin(RunningTime));运动方程 DeltaHeight = (Sin(Running Time + DeltaTime) - Sin(Running Time));
【发布时间】:2017-04-17 20:29:13
【问题描述】:

我已经开始使用 Unreal Engine 4 并在他们的网站上打开了 C++ 的最基本教程。所以这是他们提供的代码

void AFloatingActor::Tick( float DeltaTime )
{
    Super::Tick( DeltaTime );

    FVector NewLocation = GetActorLocation();
    float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
    NewLocation.Z += DeltaHeight * 20.0f;       //Scale our height by a factor of 20
    RunningTime += DeltaTime;
    SetActorLocation(NewLocation);
}

这是它应该做什么的解释: 我们刚刚编写的代码将使用我们创建的 RunningTime 变量来跟踪我们随时间的移动,从而使 FloatingActor 平滑地上下摆动。

当你编译它时,它会这样做,但它并没有告诉我任何关于它如何或为什么工作的信息。让我烦恼的是,正如标题所说的运动方程:

DeltaHeight = sin(RunningTime + DeltaTime) - sin(RunningTime)

如果有人可以向我解释这一点,将不胜感激。我要问的是这个方程背后的数学/物理解释,或者这个方程来自哪里的解释。为什么会这样。

【问题讨论】:

    标签: c++ math physics equation unreal-engine4


    【解决方案1】:

    此函数控制角色的移动(特别是高度),以便通过sine wave 随着时间的推移控制移动量。也就是说,在时间 0,它开始相对较快地向上移动,然后减缓向上移动,直到停止向上移动,然后开始向下移动,向下加速,最终减速并再次向上移动。它继续以这种方式周期性地上下移动。

    所以,这个函数的工作原理是周期性地调用它,然后在这个调用和最后一个调用之间的时间变化是 DeltaTime。最后一次调用它是 RunningTime。所以计算新位置:

    FMath::Sin(RunningTime + DeltaTime)
    

    和旧位置:

    FMath::Sin(RunningTime)
    

    然后通过取差来计算位置的变化

    float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
    

    【讨论】:

    • 我明白它在计算什么我不明白我们为什么要使用特定的方程?例如,我可以做的是: Float DeltaHeight = (FMath::Sqrt(RunningTime + DeltaTime) - FMath::Sqrt(RunningTime));那么我们为什么要使用这个特殊的方程呢?比如为什么新位置是 FMath::Sin(RunningTime + DeltaTime)?
    • 是的,那是新的位置,这个函数试图确定的是位置的变化。这样它就独立于起点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多