我的游戏有点麻烦。我想让一个球从一个点移动到另一个点。继承我的代码:
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?
我完全错过了什么吗?
答案 0 :(得分:2)
假设您正在调用标准C / C ++ cos
和sin
函数,它们接受弧度,而不是度数。删除* (180 / M_PI)
,您应该会看到预期的结果。
答案 1 :(得分:1)
我可以在这里看到以下潜在问题
您正在将atan2
的输出转换为度数,并使用cos
和sin
中的度数来获取弧度。
您正在尝试的确切旋转在旋转轴方面没有得到很好的解释。我认为mRotation
应为Rotation
。无论如何,不清楚哪个旋转矩阵适用,所以我不知道你的Velocity.X/Z
应该是什么。