【发布时间】:2017-09-18 23:56:19
【问题描述】:
我有一组角度 A,每个 a 在 A = [0, 360) 中。 现在我想计算平均角度 A。
我在rosettacode.org找到了解决方案:
public static void main(String[] args) {
printAverageAngle(350.0, 10.0);
printAverageAngle(0.0, 180);
printAverageAngle(0.0, 180.0, 180.0);
printAverageAngle(0.0, 0.0, 180.0);
printAverageAngle(0.0, 0.0, 180.0, 180.0;
}
private static void printAverageAngle(double... sample) {
double meanAngle = getMeanAngle(sample);
System.out.printf("The mean angle of %s is %s%n", Arrays.toString(sample), meanAngle);
}
public static double getMeanAngle(double... anglesDeg) {
double x = 0.0;
double y = 0.0;
for (double angleD : anglesDeg) {
double angleR = Math.toRadians(angleD);
x += Math.cos(angleR);
y += Math.sin(angleR);
}
double avgR = Math.atan2(y / anglesDeg.length, x / anglesDeg.length);
return Math.toDegrees(avgR);
}
但是有一些不需要的解决方案。
[350.0, 10.0] 的平均角度为 -1.614809932057922E-15 // 好
[0.0, 180.0] 的平均角度为 90.0 // 好
[0.0, 180.0, 180.0] 的平均角度是 180.0 // 不好
[0.0, 0.0, 180.0] 的平均角度是 7.016709298534877E-15 // 不好
[0.0, 0.0, 180.0, 180.0] 的平均角度为 90.0 // 好
在我看来,[0.0, 180.0, 180.0] 的平均角度应该是 120,而 [0.0, 0.0, 180.0] 的平均角度应该是 60。
有没有人可以处理这些特殊情况的方法?或者有什么解决办法?
谢谢
【问题讨论】:
-
常规算术平均有什么问题?
-
@coder 想象一对角度分别为 5 度和 355 度。你会认为他们的平均值是 0,但答案是 180。
-
没有。我预计平均值为 180。平均方位角为 0