C++ 新旧位置之间的速度
我在这里看到了一篇文章,通过为UNITY保存旧pos获得了速度,一些代码:C++ 新旧位置之间的速度,c++,math,vector,velocity,C++,Math,Vector,Velocity,我在这里看到了一篇文章,通过为UNITY保存旧pos获得了速度,一些代码: void TestVelocity(Vector3& Pos, Vector3 &Result) { Vector3 PreviousPos; if (GetTickCount() >= velupd) { velupd = GetTickCount() + 100//random timer for test; Vector3 Diff
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.
}
它算错了。数据只能保存对象位置(无速度等)。需要更多详细信息才能给出更准确的答案。但我基本上看到了两个问题。您没有初始化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.
}
另一个解决方案是将前面的立场作为一个论据,但是正如我所说的,如果我们不知道您想要的实现是什么,那么很难说。这些是基于所需内容的建议。对于哪些数据,您得到了什么值?对于哪些变量,您期望得到什么值?
在进行计算之前,之前的pos
没有初始化。这应该作为新对象位置和旧位置之间的矢量3速度输出。或者你是什么意思?看起来好像PreviousPos
应该是static
…其他部分更正了,不包括将PreviousPos移动到全局变量?我编辑了我的代码,似乎smth工作正常。Ofcource oldpos应在每次velupd勾选时保存。