gimpmatrix

Name

gimpmatrix -- Utilities to set up and manipulate 3x3 transformation matrices.

Synopsis



typedef     GimpMatrix[3][3];
void        gimp_matrix_transform_point     (GimpMatrix matrix,
                                             gdouble x,
                                             gdouble y,
                                             gdouble *newx,
                                             gdouble *newy);
void        gimp_matrix_mult                (GimpMatrix matrix1,
                                             GimpMatrix matrix2);
void        gimp_matrix_identity            (GimpMatrix matrix);
void        gimp_matrix_translate           (GimpMatrix matrix,
                                             gdouble x,
                                             gdouble y);
void        gimp_matrix_scale               (GimpMatrix matrix,
                                             gdouble x,
                                             gdouble y);
void        gimp_matrix_rotate              (GimpMatrix matrix,
                                             gdouble theta);
void        gimp_matrix_xshear              (GimpMatrix matrix,
                                             gdouble amount);
void        gimp_matrix_yshear              (GimpMatrix matrix,
                                             gdouble amount);
gdouble     gimp_matrix_determinant         (GimpMatrix matrix);
void        gimp_matrix_invert              (GimpMatrix matrix,
                                             GimpMatrix matrix_inv);
void        gimp_matrix_duplicate           (GimpMatrix src,
                                             GimpMatrix target);
gboolean    gimp_matrix_is_diagonal         (GimpMatrix matrix);
gboolean    gimp_matrix_is_identity         (GimpMatrix matrix);
gboolean    gimp_matrix_is_simple           (GimpMatrix matrix);

Description

When doing image manipulation you will often need 3x3 transformation matrices that define translation, rotation, scaling, shearing and arbitrary perspective transformations using a 3x3 matrix. Here you'll find a set of utility functions to set up those matrices and to perform basic matrix manipulations and tests.

Details

GimpMatrix[3][3]

typedef gdouble GimpMatrix[3][3];


gimp_matrix_transform_point ()

void        gimp_matrix_transform_point     (GimpMatrix matrix,
                                             gdouble x,
                                             gdouble y,
                                             gdouble *newx,
                                             gdouble *newy);

Transforms a point in 2D as specified by the transformation matrix.

matrix : The transformation matrix.
x : The source X coordinate.
y : The source Y coordinate.
newx : The transformed X coordinate.
newy : The transformed Y coordinate.


gimp_matrix_mult ()

void        gimp_matrix_mult                (GimpMatrix matrix1,
                                             GimpMatrix matrix2);

Multiplies two matrices and puts the result into the second one.

matrix1 : The first input matrix.
matrix2 : The second input matrix which will be oeverwritten ba the result.


gimp_matrix_identity ()

void        gimp_matrix_identity            (GimpMatrix matrix);

Sets the matrix to the identity matrix.

matrix : A matrix.


gimp_matrix_translate ()

void        gimp_matrix_translate           (GimpMatrix matrix,
                                             gdouble x,
                                             gdouble y);

Translates the matrix by x and y.

matrix : The matrix that is to be translated.
x : Translation in X direction.
y : Translation in Y direction.


gimp_matrix_scale ()

void        gimp_matrix_scale               (GimpMatrix matrix,
                                             gdouble x,
                                             gdouble y);

Scales the matrix by x and y

matrix : The matrix that is to be scaled.
x : X scale factor.
y : Y scale factor.


gimp_matrix_rotate ()

void        gimp_matrix_rotate              (GimpMatrix matrix,
                                             gdouble theta);

Rotates the matrix by theta degrees.

matrix : The matrix that is to be rotated.
theta : The angle of rotation (in radians).


gimp_matrix_xshear ()

void        gimp_matrix_xshear              (GimpMatrix matrix,
                                             gdouble amount);

Shears the matrix in the X direction.

matrix : The matrix that is to be sheared.
amount : X shear amount.


gimp_matrix_yshear ()

void        gimp_matrix_yshear              (GimpMatrix matrix,
                                             gdouble amount);

Shears the matrix in the Y direction.

matrix : The matrix that is to be sheared.
amount : Y shear amount.


gimp_matrix_determinant ()

gdouble     gimp_matrix_determinant         (GimpMatrix matrix);

Calculates the determinant of the given matrix.

matrix : The input matrix.
Returns : The determinant.


gimp_matrix_invert ()

void        gimp_matrix_invert              (GimpMatrix matrix,
                                             GimpMatrix matrix_inv);

Inverts the given matrix.

matrix : The matrix that is to be inverted.
matrix_inv : A matrix the inverted matrix should be written into.


gimp_matrix_duplicate ()

void        gimp_matrix_duplicate           (GimpMatrix src,
                                             GimpMatrix target);

Copies the source matrix to the destination matrix.

src : The source matrix.
target : The destination matrix.


gimp_matrix_is_diagonal ()

gboolean    gimp_matrix_is_diagonal         (GimpMatrix matrix);

Checks if the given matrix is diagonal.

matrix : The matrix that is to be tested.
Returns : TRUE if the matrix is diagonal.


gimp_matrix_is_identity ()

gboolean    gimp_matrix_is_identity         (GimpMatrix matrix);

Checks if the given matrix is the identity matrix.

matrix : The matrix that is to be tested.
Returns : TRUE if the matrix is the identity matrix.


gimp_matrix_is_simple ()

gboolean    gimp_matrix_is_simple           (GimpMatrix matrix);

Checks if we'll need to interpolate when applying this matrix as a transformation.

matrix : The matrix that is to be tested.
Returns : TRUE if all entries of the upper left 2x2 matrix are either 0 or 1