我在这里看了一些解决方案,但没有提供我需要的东西,所以:
我需要平均一个角度数组(0到359.9,没有负数) (A1 + A2 + A3 + An)/ n
问题是当你得到一个数组{1,359,2,358}时,如果使用上面的公式,平均值是180,但实际上它应该是0。
有什么想法吗?
答案 0 :(得分:16)
添加每个角度的单位矢量,并将结果矢量转换回角度。如果结果向量的长度为零,则输入相互抵消,结果不确定。
单位矢量的长度为1,其x和y长度由角度的余弦和正弦给出。因此,您可以按照以下伪代码对示例进行平均:
x = cos(radians(1)) + cos(radians(359)) + cos(radians(2)) + cos(radians(358));
y = sin(radians(1)) + sin(radians(359)) + sin(radians(2)) + sin(radians(358));
angle = degrees(atan2(y, x));
答案 1 :(得分:0)
离开圆的光线可以用多种方式表示。它可能是0度,360度,720度等。您需要确定适合您的正确可接受的答案,并在呈现之前隐瞒最终答案的中间答案。
1 + 359 + 2 + 358 = 360 + 360 = 720 degrees in total
720 / 4 = 360 / 2 = 180 degrees on average
答案不应该是零,而是359度不等于-1度,因为角度围绕圆圈“反过来”。
答案 2 :(得分:0)
你想要完成它,即0应该在359度之后吗?
用360获得结果的模数。
avg = ( (a1 + a2 + an) /n ) % 360
答案 3 :(得分:0)
平均度比听起来有点棘手。 前几天我必须在工作中这样做,并希望分享我的发现。
陷入几个陷阱之后,我最终得出以下定义: 平均值是使方差最小化的值。
一旦给出平均值,方差可以通过以下公式计算:
这需要O(n ^ 2)时间。
但是,如果所有值都在180度的范围内,则可以移动值,使得0包含在最大值间隙中,然后计算正常平均值。 这需要花费O(n)时间。