繁体   English   中英

两个风向的差异

[英]Diff of two wind directions

我想绘制显示一段时间内两个风向差异的图表(由不在同一地点的两个不同传感器测量)。

我将两个值都显示为方位角,即北 = 0、东 = 90、南 = 180、西 = 270。我正在考虑以下要求:

  1. 差异的绝对值应为 +0.. +180,以便使用两个值之间的较小角度
  2. 对于值B和值A之间的角度在时钟方向上较小的情况(例如值B = 50,值A = 10或值B = 50,值A = 350),差值的符号应通过定义正值来定义,而使用负值如果逆时钟方向的角度较小(例如相反)

我认为这个要求也可以理解,所以我想旋转参考系统以使 valueA 获得方位角 = 0,然后返回值 B 在比例尺上的方位角 -180.. +180。

我有这样的事情:

diff = abs(valueB - valueA)
if (diff >= 180) diff = 360 - diff

if (valueA < 180) offsetA = valueA else offsetA = valueA - 360
offsetB = valueB - offsetA
if (offsetB < 0) offsetB = offsetB + 360
if (offsetB >= 360) offsetB = offsetB - 360
if (offsetB > 180) diff = (-1) * diff

问题 1:是否可以使用更短的代码?

问题2:两个风向之间的差异有更好的表述吗? 我看不出如何使用 Wind Rose(非常适合表示速度 + 方向)来表示该时间段内两个方向之间的差异。

问题3:我会用Python或者R,有没有库已经实现了这样的功能?

如果其他SE论坛更合适,请提出建议。

在我早在 2011 年写的一篇 CodeProject 文章“C++11 的循环值数学和统计”中,我解决了同样的问题。 我称它为两个圆形值之间的定向距离

如果输入在 [0..360) 范围内,您可以使用以下内容:

// the length of the directed walk from c1 to c2, with the lowest absolute-value length
// return value is in [-180, 180)
double Sdist(double c1, double c2)
{
    double d = c2 - c1;
    if (d <  -180.) return d + 180.;
    if (d >=  180.) return d - 180.;
                    return d       ;
}

我还为圆形值定义了另一种距离类型:递增距离(顺时针)。

// the length of the increasing walk from c1 to c2 with the lowest length
// return value is in [0, 360)
double Pdist(double c1, double c2)
{
    return c2 >= c1 ? c2 - c1 : 360. - c1 + c2;
}

请参阅文章中的第 8 和第 9 节。 GitHub 上还提供了这篇文章和带有一些修复的源代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM