# Last edited on 2023-06-12 11:47:13 by stolfi

def vcross(x, y):
  return(
    x[1]*y[2] - x[2]*y[1],
    x[2]*y[0] - x[0]*y[2],
    x[0]*y[1] - x[1]*y[0]
  )
  # ----------------------------------------------------------------------

def vdist(x, y):
  return vlen(vsub(x, y))
  # ----------------------------------------------------------------------

def vdot(x, y):
  return x[0]*y[0] + x[1]*y[1] + x[2]*y[2]
  # ----------------------------------------------------------------------

def vdir(x):
  m = vlen(x);
  return ( x[0]/m, x[1]/m, x[2]/m );
  # ----------------------------------------------------------------------
  
def vlen(x):
  return sqrt(vdot(x,x))
  # ----------------------------------------------------------------------

def vsub(x, y):
  return ( x[0] - y[0], x[1] - y[1], x[2] - y[2] )
  # ----------------------------------------------------------------------

def vmix(x, sx, y, sy):
  return ( sx*x[0] +sy*y[0], sx*x[1] +sy*y[1], sx*x[2] +sy*y[2] )
