anchor.diff:  
   (defmacro with-scaling ((medium sx &optional sy origin) &body body)
     (if sy
  -      `(with-drawing-options (,medium :transformation (make-scaling-transformation ,sx ,sy ,@(if origin (list origin) nil)))
  +      `(with-drawing-options (,medium :transformation (make-scaling-transformation
  +                                                       ,sx ,sy ,@(if origin (list origin) nil)))
            ,@body)
       (let ((sx-var (make-symbol "SX")))
         `(let* ((,sx-var ,sx))
  
positive.code: (define-protocol-class transformation ())
  
  (defclass standard-transformation (transformation)
    ((mxx :type coordinate)
     (mxy :type coordinate)
     (myx :type coordinate)
     (myy :type coordinate)
     (tx  :type coordinate)
     (ty  :type coordinate)
     (inverse :type (or null standard-transformation)
              :initform nil
              :documentation "Cached inverse transformation.") ))
  
  (defmethod print-object ((self standard-transformation) sink)
    (print-unreadable-object (self sink :identity nil :type t)
  
negative.code:          (coordinate= myx 0)
           (coordinate= myy -1))))
  
  (defmethod compose-transformations ((transformation2 standard-transformation)
                                      (transformation1 standard-transformation))
    ;; (compose-transformations A B)x = (A o B)x = ABx
    (multiple-value-bind (a1 b1 d1 e1 c1 f1) (get-transformation transformation1)
      (multiple-value-bind (a2 b2 d2 e2 c2 f2) (get-transformation transformation2)
  