如何在保持速度恒定的同时使用x和y坐标移动到特定的罗盘轴承?

时间:2017-04-29 02:41:50

标签: vector trigonometry sqf

我正在编写一个确定风速和风向的功能。由于API的限制,速度和方向均由xy坐标确定。 I.e。 {(1}}表示以m / s为单位的东风分量,x表示北方分量,单位为m / s。 yx也会将风的方向确定为指南针。

我能够通过以下方式确定风速及其指南针:

y

我无法弄清楚如何表达// [0.70711, 0.70711] == 1 m/s _east = 0.70711; _north = 0.70711; _vector = sqrt((_east^2) + (_north^2)); _normalisedEast = _east / _vector; _normalisedNorth = _north / _vector; _bearing = floor ((_east atan2 _north) + 360 ) % 360; // The wind is travelling at 1 m/s at 45 degrees x坐标之间的关系以及与这些坐标相关的方位,以便独立地(或一起)操纵它们,并解决新变量。换句话说,如何从我想要移动的方位或速度开始,并在上面给出新的y_east值后工作? < / p>

如何使用此处收集的信息以特定速度移动到特定轴承?如何独立控制风速和风向,以便任何一个变量可以在特定的值范围内随机移动?

示例:

假设风目前指向_north[2, 2],相当于45°。将其更改为(0.70711*2)将导致47°的新轴承,同时保持风速恒定(带圆角)。将此更改为[1.9, 2.1]会使轴承返回45°,但会降低风速等。然后,假设您希望风在不改变风速的情况下从45°移动到2°......我我希望能够在算法上做到这一点。

(将标签添加为TLDR。)

1 个答案:

答案 0 :(得分:0)

您正在使用相同矢量的笛卡尔坐标和极坐标表示。

x,y =>  
   Magnutude = Sqrt(x^2 + y^2)
   Angle = atan2(y, x)

逆转

Magnitude, Angle => 
   x = Magnitude * Cos(Angle)
   y = Magnitude * Sin(Angle)

因此,要旋转矢量,请改变相同幅度的角度