c ++ - Vector2D数学不能给我正确的结果

时间:2017-02-16 23:08:23

标签: c++ math vector radians

我试图为我的游戏创建一个vector2D类,但我认为我的数学错误。

当我创建一个新的vector2d对象时,它会在构造函数中自动将其x和y设置为1,1。

arr = _.set_property(arr, "status", "active");

并输出:
x:1
y:1
弧度角:0.785398
幅度:1.41421
(这正是我的期望)

但问题是当我解析setAngle函数时,我得到了一些有线结果。

例如:

    Vector2D vec;

    std::cout << " x: " << vec.GetX() << " y: " << vec.GetY() << " angle rad: " << vec.GetAngleRad() << " magnitude: " << vec.GetMagnitude() << std::endl;



    system("pause");
    return 0;

我希望它以rad为单位输出角度:3
但我得到了 rad的角度:0.141593。

这是vector2D类(我试图评论我的代码,这样你就可以看到我写作时的想法了):

Vector2D vec;

vec.SetAngleRad(3);

std::cout << " x: " << vec.GetX() << " y: " << vec.GetY() << " angle rad: " << vec.GetAngleRad() << " magnitude: " << vec.GetMagnitude() << std::endl;



system("pause");
return 0;

所以如果有人能向我解释我在这里做错了什么,我真的很感激。)

1 个答案:

答案 0 :(得分:3)

要获得整圆范围内的角度,您必须同时使用带有atan2函数的y和x分量

return atan2( _y, _x );

如果您需要范围-Pi..Pi

,请注意结果范围+2*Pi并按0..2*Pi更正结果

另一个问题::SetMagnitude方法确实将当前幅度乘以magnitude乘数,而name假定该方法应设置它(因此应用SetMagnitude(2)后的矢量长度2将具有幅度4)) 。

因此,最好删除*hypotenuse乘法(或更改方法名称)