arc method

Quat arc(
  1. Vec3 v1,
  2. Vec3 v2
)

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;
}