function interp_q,t,quats,q=q,usec=usec,bezier=bezier
  if n_elements(q) eq 0 then q=*quats.q
  if n_elements(usec) eq 0 then usec=*quats.usec
  if n_elements(t) gt 1 then begin
    result=dblarr(n_elements(t),4)
    for i=0,n_elements(t)-1 do result[i,*]=interp_q(t[i],q=q,usec=usec,bezier=bezier)
    return,{quats,usec:ptr_new(t),q:ptr_new(result)}
  end else begin
    n=n_elements(usec)
    i=min([max([tpir(usec,t),0]),n-3])
    u=linterp(usec[i],0d,usec[i+1],1d,t)
    if i eq 0 or i ge n-1 or ~keyword_set(bezier) then begin
      return,slerp(q[i,*],q[i+1,*],u)
    end else begin
      return,bezier_slerp(q[i-1,*],q[i,*],q[i+1,*],q[i+2,*],u)
    end
  end
end
