I have a set of angles A with every a in A = [0, 360). Now I want to calculate the mean angle A.
I found a solution on 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);
}
But there are some unwanted solutions.
The mean angle of [350.0, 10.0] is -1.614809932057922E-15 // good
The mean angle of [0.0, 180.0] is 90.0 // good
The mean angle of [0.0, 180.0, 180.0] is 180.0 // bad
The mean angle of [0.0, 0.0, 180.0] is 7.016709298534877E-15 // bad
The mean angle of [0.0, 0.0, 180.0, 180.0] is 90.0 // good
In my opinion the mean angle of [0.0, 180.0, 180.0] should be 120 and of [0.0, 0.0, 180.0] it should be 60.
Has anyone a method that works with these special cases? Or an idea to fix it?
Thanks