Java Atan2() Сортировка нарушает генеральный договор?

У меня возникли проблемы с методом сравнения, который используется в Java/Processing.

Он говорит, что нарушает свой общий контракт, что, как я понимаю, означает, что он не работает над отношениями между предметами последовательно...

Но я не понимаю почему. Поскольку он просто возвращает угол, тета, основываясь на соотношении ycor к xcor (например, sin к cos), не должна ли она сортировать их последовательно, основываясь на их положениях от 0 до 360 градусов?

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;
}

Любая помощь очень ценится, спасибо!

Конкретный контекст заключается в том, что ошибка возникает при запуске Collection.Sort().

1 ответ

РЕДАКТИРОВАТЬ: см. Комментарий Луи Вассермана выше:

Возможно ли, что xcor а также ycor оба равны нулю для некоторых из них? Я подозреваю, что это приведет к NaN. Переключение на Double.compare(Math.atan2(ycor, xcor), Math.atan2(other.ycor, other.xcor)) должен работать.

Внизу было содержание этого поста; ЭТО ВЕРОЯТНО НЕПРАВИЛЬНО

Неясно, является ли один угол "большим", чем другой - если я от вас по часовой стрелке на 170 градусов, то я также против вас на 190 градусов.

Даже если вы решите использовать "в пределах 180 градусов" как большее, вы все равно не будете удовлетворены неравенством треугольника.

Другие вопросы по тегам