struct quat
{
- double a;
+ double a; // cos(Angle / 2)
vec v;
quat() {a=0.0; v=zAxis;}
quat(const double a, const vec v) {this->a=a; this->v=v;}
+ quat(const vec v1, const vec v2) {a=v1.dot(v2); v=zAxis; if (abs(a)<(1-toleranceLimit)) {a=sqrt((1+a)/2); v=v1.cross(v2);}}
quat operator*(const quat q) const {return quat(a*q.a - v.dot(q.v), q.v*a + v*q.a + v.cross(q.v));}
quat operator*(const double s) const {return quat(a*s, v*s);}