I'm having trouble with a comparison method being used in Java/Processing.
It says it violates its general contract, which I understand means it doesn't work on the relationships between the items consistently...
But I don't understand why. Since it just returns the angle, theta, based on the ratio of ycor to xcor (like sin to cos), shouldn't it sort them consistently based on their positions from 0 to 360 degrees?
public int compareTo(Orb other) {
double X = Math.atan2(ycor,xcor);
if (Math.atan2(other.ycor,other.xcor) > X) {
return -1;
}
if (Math.atan2(other.ycor,other.xcor) == X) {
return 0;
}
return 1;
}
Any help is very appreciated, thanks!
The specific context is that the error occurs when a Collection.Sort() is run.
EDIT: See Louis Wasserman's comment above:
THE BELOW WAS THE CONTENT OF THIS POST; IT IS PROBABLY WRONG
It's not well-defined whether one angle is "greater" than another - if I'm clockwise of you by 170 degrees, then I'm also counterclockwise of you by 190 degrees.
Even if you choose to use "within 180 degrees of" as greater-than, you still don't have the triangle inequality satisfied.