四元数比较?

ana*_*kos 6 java math comparison quaternions comparable

四元数比较可能吗?我正在编写一个Java类的Quaternions,我想实现Comparable接口来使用该Collections.sort(List<Quaternion>)工具.我不是数学专家,我真的不明白我读到的关于四元数的事情.那么,任何人都可以告诉我,我可以覆盖compareToQuaternions 的方法以及如何?

我的班级宣誓:

public class Quaternion implements Serializable, Comparable<Quaternion> {

    private double s; // scalar part
    private double i, j, k; // vectorel part


    public Quaternion() {
        super();
    }

    public Quaternion(double s, double i, double j, double k) {
        super();
        this.s = s;
        this.i = i;
        this.j = j;
        this.k = k;
    }
Run Code Online (Sandbox Code Playgroud)

Joh*_*rth 1

没有理由不能比较两个四元数。假设您要比较大小,请计算并比较四元数范数。您的四元数类应该有一个范数(大小)方法,允许 toCompare 如下所示:

int compareTo(Quaternion o){
  return (int)(this.norm() - o.norm());
}
Run Code Online (Sandbox Code Playgroud)

更好的版本是:

int compareTo(Quaternion o){
  // return (int)(this.norm() - o.norm());
  double tNorm = this.norm;
  double oNorm = o.norm;
  int retVal = 0;

  if (tNorm < oNorm){
    retVal = -1;
  } else if (tNorm > oNorm){
    retVal = 1;
  }

  return retVal;
}
Run Code Online (Sandbox Code Playgroud)

  • 不应该比较四元数是有原因的:它们不能排序。您可以定义如何比较两个四元数,但也有一些缺点。使用范数时最严重的问题是(正如克拉斯提到的)两个不相等的四元数可以具有相同的范数。这也违反了 [compareTo 方法的定义](http://download.oracle.com/javase/6/docs/api/java/lang/Comparable.html),该方法规定只有当两个对象是相等的。 (2认同)