   translate: (tx, ty)->
     @_concat 1, 0, 0, 1, tx, ty
 
+  translatePoint: ({x, y})->
+    @translate x, y
+
   # ## scale(sx:*Number*, sy:*Number*):*Matrix*
   # Applies a scaling transformation to this object.
   scale: (sx, sy)->
     @_concat sx, 0, 0, sy, 0, 0
+
+  scalePoint: ({x, y})->
+    @scale x, y
 
   # ## rotate(angle:*Number*):*Matrix*
   # Applies a rotation transformation to this object.

  #     |@xx @yx @ox||1 0 pt.x|   |@xx @yx @xx*pt.x+@yx*pt.y+@ox|
  #     |@xy @yy @oy||0 1 pt.y| = |@xy @yy @xy*pt.x+@yy*pt.y+@oy|
  #     |0   0   1  ||0 0 1   |   |0   0   1                    |
  transformPoint: (pt)->
    new Point @xx * pt.x + @yx * pt.y + @ox, @xy * pt.x + @yy * pt.y + @oy

  deltaTransformPoint: (pt)->
    new Point @xx * pt.x + @yx * pt.y, @xy * pt.x + @yy * pt.y

  #     |1 0 tx||sx 0  0||c -s 0|   |sx 0  tx||c -s 0|   |sx*c -sx*s tx|
  #     |0 1 ty||0  sy 0||s c  0| = |0  sy ty||s c  0| = |sy*s sy*c  ty|


  # ## apply(matrix:*Matrix*):*void*
  # Applies the properties of specified *Matrix* object to this object.
  apply: ({xx, xy, yx, yy, ox, oy})->
    @_apply xx, xy, yx, yy, ox, oy
  _apply: (xx, xy, yx, yy, ox, oy)->
    @xx = xx
    @xy = xy
