我知道如何从速度产生旋转,我相信这有点像这个
thing.rotation = Math.Atan2(thing.velocity.Y, thing.velocity.X);
但是,有没有办法根据旋转产生速度?我认为更简单的方法就是说,是否存在Atan2的有效反转,而是返回Vector2而不是double?感谢。
答案 0 :(得分:0)
你无法回复,在这个组(atan2,x,y)中你总是需要知道2个参数来找出第3个参数。
答案 1 :(得分:0)
给定一个角度,您可以通过以下方式生成Vector2
:
new Vector2(Math.Cos(angle), Math.Sin(angle));
这将为您提供单位长度的向量。您应该乘以速度的大小来获得适当的速度矢量:
Vector2 velocity = new Vector2(speed * Math.Cos(angle), speed * Math.Sin(angle));
这将允许您为任意角度的给定速度创建速度矢量。
请注意,需要两个参数:您想要的角度和幅度。
答案 2 :(得分:0)
您可能会将速度视为具有直角坐标(x,y)的复数,并将其转换为极坐标(ro,theta):
double theta(double x, double y) { return atan2(y, x); }
void ro(double x, double y) { return sqrt(x*x + y*y); }
现在速度用模数(ro)表示,表示其大小,角度θ表示方向。
逆变换由下式给出:
double X(double ro, double theta) {return ro * cos(theta); }
double Y(double ro, double theta) {return ro * sin(theta); }
由于您使用的是OOP语言,因此使用或创建复杂数字类肯定会更好,它是处理平面几何的强大工具。