anchor.diff:    ;; get cos of 'angle' between quaternions
     (let ((cos-angle (v4:dot start-quat end-quat)))
       (if (>= cos-angle 0f0)
  -        (+ (* end-quat pos)
  -	   (* start-quat (cl:- 1.0 pos)))
  -        (+ (* end-quat pos)
  -	   (* start-quat (cl:- pos 1.0))))))
  +        (+ (*s end-quat pos)
  +	   (*s start-quat (cl:- 1.0 pos)))
  +        (+ (*s end-quat pos)
  +	   (*s start-quat (cl:- pos 1.0))))))
   
   (defun slerp (start-quat end-quat pos)
     "Spherically interpolate between two quaternions. Note that this
  
positive.code:   (reduce (lambda (a x) `(v4:- ,a ,x)) components))
  
  (defun *s (quat-a scalar)
    (v4:* quat-a scalar))
  
  (defun * (quat-a quat-b)
    (q! (cl:- (cl:* (w quat-a) (w quat-b))
  
negative.code:     ;; if angle is less than 90 degrees
      (if (> cos-angle 0f0)
          ;; use standard interp
          (+ (*s end-quat pos)
  	   (*s start-quat (cl:- 1.0 pos)))
          ;; take shorter path
          (+ (*s end-quat pos)
  	   (*s start-quat (cl:- pos 1.0))))))
  