arc method
Implementation
Quat arc(Vec3 v1, Vec3 v2 ){
double x1 = v1.x;
double y1 = v1.y;
double z1 = v1.z;
double x2 = v2.x;
double y2 = v2.y;
double z2 = v2.z;
double d = x1*x2 + y1*y2 + z1*z2;
if( d==-1 ){
x2 = y1*x1 - z1*z1;
y2 = -z1*y1 - x1*x1;
z2 = x1*z1 + y1*y1;
d = 1 / math.sqrt( x2*x2 + y2*y2 + z2*z2 );
w = 0;
x = x2*d;
y = y2*d;
z = z2*d;
return this;
}
double cx = y1*z2 - z1*y2;
double cy = z1*x2 - x1*z2;
double cz = x1*y2 - y1*x2;
w = math.sqrt( ( 1 + d) * 0.5 );
d = 0.5 / w;
x = cx * d;
y = cy * d;
z = cz * d;
return this;
}