我试图为我的游戏创建一个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;
所以如果有人能向我解释我在这里做错了什么,我真的很感激。)
答案 0 :(得分:3)
要获得整圆范围内的角度,您必须同时使用带有atan2
函数的y和x分量
return atan2( _y, _x );
如果您需要范围-Pi..Pi
+2*Pi
并按0..2*Pi
更正结果
另一个问题::SetMagnitude
方法确实将当前幅度乘以magnitude
乘数,而name假定该方法应设置它(因此应用SetMagnitude(2)
后的矢量长度2将具有幅度4)) 。
因此,最好删除*hypotenuse
乘法(或更改方法名称)