Java Atan2()Sort违反了一般合同?

时间:2015-06-11 21:57:16

标签: java processing 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 个答案:

答案 0 :(得分:0)

编辑:请参阅Louis Wasserman上面的评论:

  

xcorycor是否有可能为零?我怀疑这会导致NaN。切换到Double.compare(Math.atan2(ycor, xcor)Math.atan2(other.ycor, other.xcor))应该有效。

以下是本次发布的内容;这可能是错误的

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

即使您选择使用“180度以内”,但仍然没有满足三角不等式。