两个角度与回绕的平均[复制](Average of two angles with wrap aro

2019-09-19 23:02发布

可能重复:
您是如何计算一组角度的平均值?

我有两个角,α= 20度且b = 350度。 这两个角度的平均值是185度。 然而,如果我们考虑到的最大角度为360度,并允许回绕,人们可以看到5度是更接近平均水平。

我有麻烦来了一个良好的公式来处理周围包裹的是平均计算时。 任何人有什么提示吗?

还是我自己的拍摄在这里的脚? 这被认为是“不好的做法”,在数学?

Answer 1:

试试这个(在C#为例):

    static void Main(string[] args)
    {
        Console.WriteLine(GetAngleAverage(0,0));
        Console.WriteLine(GetAngleAverage(269, 271));
        Console.WriteLine(GetAngleAverage(350, 20));
        Console.WriteLine(GetAngleAverage(361, 361));
    }

    static int GetAngleAverage(int a, int b)
    {
        a = a % 360;
        b = b % 360;

        int sum = a + b;
        if (sum > 360 && sum < 540)
        {
            sum = sum % 180;
        }
        return sum / 2;
    }

我认为它的工作原理,输出

0
270
5
1


Answer 2:

就拿中的正常平均,然后把它MOD 180在您的例子这给了5度,符合市场预期。



Answer 3:

如果你看看角一圈,你会看到有2个相反的“角度”对应于您的“平均”。

因此,无论185°和5°是正确的。

但是你mentionned 越接近平均水平 。 因此,在这种情况下,您可以选择更接近角度。

通常,角度“平均”涉及逆时针方向。 “平均”是不一样的,如果您打开两个角度(或者,如果你使用的顺时针方向)。

例如,对于a=20°b=350° ,你正在寻找后到来的角度a和前b 在逆时针方向上185°是答案。 如果你正在寻找之前时的角度a和后b在逆时针方向上(或后a和前b在counterclock方向上), 就是答案。

的回答这个职位是做正确的方式。

因此,对于解决方案的伪代码

if (a+180)mod 360 == b then
  return (a+b)/2 mod 360 and ((a+b)/2 mod 360) + 180 (they are both the solution, so you may choose one depending if you prefer counterclockwise or clockwise direction)
else
  return arctan(  (sin(a)+sin(b)) / (cos(a)+cos(b) )


文章来源: Average of two angles with wrap around [duplicate]