C ++ 3D角速度

时间:2014-05-05 23:34:08

标签: c++ velocity

我的游戏有点麻烦。我想让一个球从一个点移动到另一个点。继承我的代码:

void Create()
{
    // Initialise points
    StartPosition - { 20, 0, 5 };
    EndPosition = { -20, 0, 5 };
}

void Calculate()
{
    // Calculate difference in axis
    float X = EndPosition.x - StartPosition.x;
    float Z = EndPosition.z - StartPosition.z;

    // Calculate y-axis rotation
    float Rotation = atan2(Z, X) * (180 / M_PI); 

    // Calculate velocity
    Velocity.x = cos( Rotation ) * 5;
    Velocity.y = 0.0f;
    Velocity.z = sin( Rotation ) * 5;
}

我知道正在正确计算旋转(180),但它会计算出错误的速度:

X: -2.9923
Y: 0
Z: -4.00576

现在看到起点和终点都是Z = 5,我认为Z轴速度应该是0?

我完全错过了什么吗?

2 个答案:

答案 0 :(得分:2)

假设您正在调用标准C / C ++ cossin函数,它们接受弧度,而不是度数。删除* (180 / M_PI),您应该会看到预期的结果。

答案 1 :(得分:1)

我可以在这里看到以下潜在问题

  1. 您正在将atan2的输出转换为度数,并使用cossin中的度数来获取弧度。

  2. 您正在尝试的确切旋转在旋转轴方面没有得到很好的解释。我认为mRotation应为Rotation。无论如何,不​​清楚哪个旋转矩阵适用,所以我不知道你的Velocity.X/Z应该是什么。