Math 绕包时两个角度的平均值

Math 绕包时两个角度的平均值,math,average,angle,Math,Average,Angle,可能重复: 我有两个角度,a=20度,b=350度。这两个角度的平均值为185度。然而,如果我们认为最大角度是360度,并允许环绕,则可以看到5度是接近平均值。 在计算平均值时,我很难想出一个好的公式来处理这个问题。有人得到任何提示吗 还是我在这里开枪打自己的脚?这被认为是数学上的“坏习惯”吗?只要取一个正常的平均值,然后取180模。在您的示例中,这是预期的5度。试试这个(C#中的示例): 如果你看一看角圆,你会发现有两个相反的“角”对应于你的“平均值” 所以185°和5°都是正确的 但你提到

可能重复:

我有两个角度,a=20度,b=350度。这两个角度的平均值为185度。然而,如果我们认为最大角度是360度,并允许环绕,则可以看到5度是接近平均值。 在计算平均值时,我很难想出一个好的公式来处理这个问题。有人得到任何提示吗


还是我在这里开枪打自己的脚?这被认为是数学上的“坏习惯”吗?

只要取一个正常的平均值,然后取180模。在您的示例中,这是预期的5度。

试试这个(C#中的示例):


如果你看一看角圆,你会发现有两个相反的“角”对应于你的“平均值”

所以185°和5°都是正确的

但你提到了更接近平均值。所以在这种情况下,你可以选择更接近的角度

通常,角度的“平均值”与逆时针方向有关。如果切换两个角度(或使用顺时针方向),则“平均值”不同

例如,使用
a=20°
b=350°
,您正在寻找逆时针方向
a
之后和
b
之前的角度,
185°
就是答案。如果要查找逆时针方向
a
之前和
b
之后的角度(或逆时针方向
a
之后和
b
之前的角度),
就是答案

答案是正确的做法

因此,解决方案的伪代码是

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) )

重复:它确实和我的问题非常相似,奇怪的是我找不到它。它不是重复的。它与模运算有关,而不是具体的角度,并且由于必须处理任意数量的值的平均值,它具有相当的复杂性。这个问题本身是封闭的,因为“没有焦点”,关于它的最佳答案实际上回答了当前的问题,而不是那个问题。因此,我认为我们应该重新讨论这个问题。有一个[重新打开]按钮供那些有特权的用户使用。是的,这是我要找的最接近的平均值。a为180,b为270,我得到数学:atan((数学:sin(180)+数学:sin(270))/(数学:cos(180)+数学:cos(270)))-1.1946710584651132不期望我已经测试过了,它是正确的。但不幸的是,我们不得不使用所有这些trig函数。Stecys回答状态采用mod 360,这似乎在我尝试过的几次尝试中都起作用。360在哪里失败,180在哪里成功?取(a+b)/2这样的平均值,然后取180模,与先取(a+b)360模,然后除以2完全相同。两者都是等效的。这不起作用。示例:angle1=280,angle2=10,它们的平均值为325。你的公式是145。不完全正确。从这个意义上说,平均值是将两个角度平分的角度,你可以通过一个简单的图表看到这两个答案是相等的。我投了反对票,因为这个公式不起作用。这个问题似乎很难回答。我想您应该删除if()块中的“return”。GetAngleAverage(350,20)应该是5,而不是10。“总和>360”行应该是“总和>=360”。否则,350和10的平均角度会变成180,这不是你想要的。同样,用这个方法得到的190和190的平均角度会变成10。所以我认为这个方法不行。我同意,这个方法不行。请投反对票。
0
270
5
1
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) )