[cairo] Extracting The Scaling Component Of A Matrix
ldo at geek-central.gen.nz
Thu Dec 10 16:51:22 PST 2015
I just updated my “faux 3D ball” example
to work with different resolutions just by changing a single parameter.
To do this, I had to properly size the convolution matrices in device
coordinates, when their sizes are given in user coordinates. Here’s how
I construct a matrix that implements just the scaling component of the
CTM in the Cairo context “ctx”:
scaling = Matrix.scale(ctx.user_to_device_distance(Vector(1, 1)))
This can be easily adapted to extracting the scaling component of a
given matrix “mat”:
scaling = Matrix.scale(mat.mapdelta(Vector(1, 1)))
Exercise: can you come up with a similarly simple expression for
extracting the angle of the rotation component of a matrix?
More information about the cairo