quat versor() const {double m=mag(); return tolerance(m) ? quat(0, zAxis) : *this/m;} // Unit Quaternion
quat normVec() const {double s=a*a; s= a<=1 ? sqrt(1-s) : 0; return quat(a, v.norm(s));} // Normalize Quaternion by only scalling the vector
- // vec operator*(const vec v2) const {return (*this * quat(0,v2) * conj()).v;} // Rotate vector by quaternion
- vec operator*(const vec v2) const {return (quat(-v.dot(v2), v2*a + v.cross(v2)) * conj()).v;} // but skip the initial mult-by-zero
+ vec operator*(const vec v2) const {return (*this * quat(0,v2) * conj()).v;} // Rotate vector by quaternion (32nS on 2.1 GHz Intel E6420)
};
}