@Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o.getClass() == getClass())) return false;
    final Rotation4D r = (Rotation4D) o;
    /*
     * See On Quaternions and Ocontions John H. Conway, Derek A. Smith page 42
     * [-l,-r] = [l,r] and [-l,r]=[l,-r]=-[l,r]
     */
    return (r.left.equals(this.left) && r.right.equals(this.right)) ||
        (r.left.equals(this.left.minus()) && r.right.equals(this.right.minus()));

  }