ID:1476321
 
Seriously, I was trying to code my own matrix transforms for my AI library and that fell through because of friggin bound issues.
/matrix was added with the animate() and transform stuff in BYOND v500.
That'll do it. I went into hiatus around 4.93? 4.88? or something
A number of additions were made since v500, including atom.transform (/matrix transformations), atom.alpha, atom.color, and atom.blend_mode. These take advantage of DirectX graphics rendering on the backend so that clients can do nifty work for you instead of sending this information through the server.

Similarly, the animate() proc is used for tweening, with different styles of easing. You can use this to move, transform, and animate an atom on-screen in a fluid manner whilst only sipping bandwidth.
Not sure if I either don't understand matrices correctly, or if there's just something weird with this, but if you set x, y, pixel_x, and pixel_y manually, rotation and scale transforms don't look right.
Matrix operations are done from the center of the icon regardless of pixel offsets or location. To change the "origin" of the icon, use matrix.Translate() first.

client/New()
..()
var/obj/o = new
o.loc = locate(1,1,1)
o.icon = icon('mapicons.dmi',"cans") // change to whichever icon you have.
o.pixel_x = 20
o.pixel_y = 20

var/matrix/m = new
m.Translate(20,20)
m.Scale(2,2)
m.Turn(45)

o.transform = m
Looking at matrices, they're not exactly what I had in mind, I guess I'll have to let my library wait for a while.
Because the graphical effect is rendered client-side instead of created by the server CPU like an /icon object, matrix transforms allow for fast and easy rotation and scaling.
You don't need to understand matrices to use the new atom.transform(I haven't even used it yet), but here's a quick run through on affine transformations in Java2D.

It's not language specific and DM's /matrix object seems to bear some resembleance to Java2D's so applying what you learned from that article in DM shouldn't be difficult.