Imager::Matrix2d - simple wrapper for matrix construction |
Imager::Matrix2d - simple wrapper for matrix construction
use Imager::Matrix2d; $m1 = Imager::Matrix2d->identity; $m2 = Imager::Matrix2d->rotate(radians=>$angle, x=>$cx, y=>$cy); $m3 = Imager::Matrix2d->translate(x=>$dx, y=>$dy); $m4 = Imager::Matrix2d->shear(x=>$sx, y=>$sy); $m5 = Imager::Matrix2d->reflect(axis=>$axis); $m6 = Imager::Matrix2d->scale(x=>$xratio, y=>$yratio); $m8 = Imager::Matric2d->matrix($v11, $v12, $v13, $v21, $v22, $v23, $v31, $v32, $v33); $m6 = $m1 * $m2; $m7 = $m1 + $m2; use Imager::Matrix2d qw(:handy); # various m2d_* functions imported # where m2d_(.*) calls Imager::Matrix2d->$1()
This class provides a simple wrapper around a reference to an array of 9 coefficients, treated as a matrix:
[ 0, 1, 2, 3, 4, 5, 6, 7, 8 ]
Most of the methods in this class are constructors. The others are overloaded operators.
Note that since Imager represents images with y increasing from top to bottom, rotation angles are clockwise, rather than counter-clockwise.
identity()
You can also specify a center for the scaling with the cx
and cy
parameters.
compose(matrix...)
For example, for three matrices:
my $out = Imager::Matrix2d->compose($m1, $m2, $m3);
is equivalent to:
my $out = $m3 * $m2 * $m1;
Returns the identity matrix if no parameters are supplied.
May return the supplied matrix if only one matrix is supplied.
_mult()
Currently both the left and right-hand sides of the operator must be an Imager::Matrix2d.
When composing a matrix for transformation you should multiply the matrices in the reverse order of the transformations:
my $shear = Imager::Matrix2d->shear(x => 0.1); my $rotate = Imager::Matrix2d->rotate(degrees => 45); my $shear_then_rotate = $rotate * $shear;
or use the compose method:
my $shear_then_rotate = Imager::Matrix2d->compose($shear, $rotate);
_add()
Currently both the left and right sides of the operator must be Imager::Matrix2d objects.
_string()
This returns a string containing 3 lines of text with no terminating newline.
I tried to make it fairly nicely formatted. You might disagree :)
Provided for older perls that don't handle magic auto generation of eq from ``''.
The following functions are shortcuts to the various constructors.
These are not methods.
You can import these methods with:
use Imager::Matrix2d ':handy';
m2d_rotate()
m2d_translate()
m2d_shear()
m2d_reflect()
m2d_scale()
Tony Cook <tony@develop-help.com>
Needs a way to invert a matrix.
Imager(3), Imager::Font(3)
Imager::Matrix2d - simple wrapper for matrix construction |