我正在编写一个确定风速和风向的功能。由于API的限制,速度和方向均由x
和y
坐标确定。 I.e。 {(1}}表示以m / s为单位的东风分量,x
表示北方分量,单位为m / s。 y
和x
也会将风的方向确定为指南针。
我能够通过以下方式确定风速及其指南针:
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。)
答案 0 :(得分:0)
您正在使用相同矢量的笛卡尔坐标和极坐标表示。
x,y =>
Magnutude = Sqrt(x^2 + y^2)
Angle = atan2(y, x)
逆转
Magnitude, Angle =>
x = Magnitude * Cos(Angle)
y = Magnitude * Sin(Angle)
因此,要旋转矢量,请改变相同幅度的角度