从一个角度计算速度

本文关键字:计算 速度 一个 | 更新日期: 2023-09-27 18:14:04

我知道如何根据速度产生旋转,我相信这在某种程度上与一致

thing.rotation = Math.Atan2(thing.velocity.Y, thing.velocity.X);

然而,有没有一种方法可以根据旋转产生速度?我认为一个简短的说法是,是否存在Atan2的有效逆,它返回Vector2而不是double?谢谢

从一个角度计算速度

给定角度,您可以通过生成Vector2

new Vector2(Math.Cos(angle), Math.Sin(angle));

这将给你一个单位长度的向量。你应该乘以你的速度大小,得到你合适的速度矢量:

Vector2 velocity = new Vector2(speed * Math.Cos(angle), speed * Math.Sin(angle));

这将允许您为任意角度的给定速度创建速度向量。

请注意,需要两个参数:所需的角度和大小。

您无法恢复,在这个组(atan2,x,y(中,您总是需要知道2个参数才能找到第三个参数。

您可能认为速度是一个具有直角坐标(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); }

由于您使用的是面向对象语言,因此使用或创建一个复数类肯定会更好,它是处理平面几何的强大工具。