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: 			      recip-sin-angle)))
                  ;; angle is close to 180 degrees
                  (list (cl:- pos 1.0) pos))))
      (+ (* start-quat start-mult)
         (* end-quat end-mult))))
  
  (defun approx-slerp (start-quat end-quat pos)
    (let* ((cos-angle (v4:dot start-quat end-quat))
  
negative.code:   (reduce (lambda (a x) `(v4:- ,a ,x)) components))
  
  (defun *s (quat-a scalar)
    (v:* quat-a scalar))
  
  (defun * (quat-a quat-b)
    (q! (cl:- (cl:* (w quat-a) (w quat-b))
  