-1

我在使用 Java/Processing 中使用的比较方法时遇到问题。

它说它违反了它的一般合同,我理解这意味着它不能始终如一地处理项目之间的关系......

但我不明白为什么。由于它只是根据 ycor 与 xcor 的比率(如 sin 与 cos)返回角度 theta,它不应该根据它们从 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() 时发生错误。

4

1 回答 1

0

编辑:见上面 Louis Wasserman 的评论:

是否有可能xcor并且ycor其中一些都为零?我怀疑这会导致NaN。切换到Double.compare(Math.atan2(ycor, xcor)Math.atan2(other.ycor, other.xcor))应该可以工作。

以下是这篇文章的内容;可能是错的

一个角度是否比另一个角度“更大”并没有明确的定义——如果我顺时针旋转 170 度,那么我也逆时针旋转 190 度。

即使您选择使用“180 度以内”作为大于,您仍然无法满足三角不等式。

于 2015-06-11T22:01:29.153 回答