首页 > 解决方案 > 新旧位置之间的速度

问题描述

我在这里看到了通过为 UNITY 保存旧 pos 来获得速度的帖子,一些代码:

void TestVelocity(Vector3& Pos, Vector3 &Result)
{
    Vector3 PreviousPos;

    if (GetTickCount() >= velupd)
    {
        velupd = GetTickCount() + 100//random timer for test;

        Vector3 Diff = Pos - PreviousPos;
        float Len = sqrtf(Diff .x * Diff .x + Diff .y * Diff .y + Diff .z * Diff .z);

        if (Len >= 0.01)
        {
            Result = (Diff / Len);
        }
    }
      PreviousPos = Pos.
}

它计算错误。数据仅适用于对象位置(无速度等)。

标签: c++mathvectorvelocity

解决方案


需要更多细节才能给您更准确的答案。但我基本上看到了两个问题。您没有初始化PreviousPos对象,在我看来您希望它持续存在,对吗?

假设Vector3类具有减号 ( - ) 运算符重载,因此您可以执行此操作,您可能会执行此操作。

void TestVelocity(Vector3& Pos, Vector3 &Result)
{  
static Vector3 PreviousPos; //Initialize here the initial position to zero with your constructor

    if (GetTickCount() >= velupd)
    {
        velupd = GetTickCount() + 100//random timer for test;

        Vector3 Diff = Pos - PreviousPos;
        float Len = sqrtf(Diff .x * Diff .x + Diff .y * Diff .y + Diff .z * Diff .z);

        if (Len >= 0.01)
        {
            Result = (Diff / Len);
        }
    }
  PreviousPos = Pos.
}

另一种解决方案是将先前的立场作为论据,但正如我所说,如果我们不知道您想要的实现是什么,这很难说。这些是基于似乎需要的建议。


推荐阅读