Eina_Matrix3_Group(3)

NAME
Eina_Matrix3_Group - 3x3 floating point matrices

 - Definition and operations for 3x3 matrices.

SYNOPSIS

  Data Structures
struct _Eina_Matrix3
A 3x3 floating point matrix.

  Macros
#define EINA_MATRIX3_FORMAT 'g %g %g | %g %g %g | %g %g %g'
Helper macro for printf formatting.
#define EINA_MATRIX3_ARGS(m)
Helper macro for printf formatting arg.

  Typedefs
typedef struct _Eina_Matrix3 Eina_Matrix3
A 3x3 floating point matrix.

  Functions
EINA_API Eina_Matrix_Type eina_matrix3_type_get (const Eina_Matrix3 *m)
Returns the type of the given floating point matrix.
EINA_API void eina_matrix3_values_set (Eina_Matrix3 *m, double xx, double xy, double xz, double yx, double yy, double yz, double zx, double zy, double zz)
Sets the values of the coefficients of the given floating point matrix.
EINA_API void eina_matrix3_values_get (const Eina_Matrix3 *m, double *xx, double *xy, double *xz, double *yx, double *yy, double *yz, double *zx, double *zy, double *zz)
Gets the values of the coefficients of the given floating point matrix.
EINA_API void eina_matrix3_fixed_values_get (const Eina_Matrix3 *m, Eina_F16p16 *xx, Eina_F16p16 *xy, Eina_F16p16 *xz, Eina_F16p16 *yx, Eina_F16p16 *yy, Eina_F16p16 *yz, Eina_F16p16 *zx, Eina_F16p16 *zy, Eina_F16p16 *zz)
Gets the values of the coefficients of the given fixed point matrix.
EINA_API void eina_matrix3_matrix3_f16p16_to (const Eina_Matrix3 *m, Eina_Matrix3_F16p16 *fm)
Transforms the given floating point matrix to the given fixed point matrix.
EINA_API Eina_Bool eina_matrix3_equal (const Eina_Matrix3 *m1, const Eina_Matrix3 *m2)
Checks whether the two matrices are equivalent.
EINA_API void eina_matrix3_compose (const Eina_Matrix3 *m1, const Eina_Matrix3 *m2, Eina_Matrix3 *dst)
Sets dst as the matrix multiplication (composition) of two matrices.
EINA_API void eina_matrix3_translate (Eina_Matrix3 *m, double tx, double ty)
Sets the matrix values for a translation operation.
EINA_API void eina_matrix3_scale (Eina_Matrix3 *m, double sx, double sy)
Sets the matrix values for a scaling operation.
EINA_API void eina_matrix3_rotate (Eina_Matrix3 *m, double rad)
Sets the matrix values for a rotation operation.
EINA_API void eina_matrix3_identity (Eina_Matrix3 *m)
Sets the given floating point matrix to the identity matrix.
EINA_API double eina_matrix3_determinant (const Eina_Matrix3 *m)
Calculates the determinant of the given matrix.
EINA_API void eina_matrix3_divide (Eina_Matrix3 *m, double scalar)
Divides the given matrix by a scalar number.
EINA_API void eina_matrix3_inverse (const Eina_Matrix3 *m, Eina_Matrix3 *m2)
Computes the inverse of the given matrix.
EINA_API void eina_matrix3_transpose (const Eina_Matrix3 *m, Eina_Matrix3 *a)
Computes the transpose of the given matrix.
EINA_API void eina_matrix3_cofactor (const Eina_Matrix3 *m, Eina_Matrix3 *a)
Computes the cofactor of the given matrix.
EINA_API void eina_matrix3_adjoint (const Eina_Matrix3 *m, Eina_Matrix3 *a)
Computes the adjoint of the given matrix.
EINA_API void eina_matrix3_point_transform (const Eina_Matrix3 *m, double x, double y, double *xr, double *yr)
Computes the transform of a 2D point using the given matrix.
EINA_API void eina_matrix3_rectangle_transform (const Eina_Matrix3 *m, const Eina_Rectangle *r, const Eina_Quad *q)
Computes the transformation of a rectangle using the given matrix.
EINA_API Eina_Bool eina_matrix3_quad_quad_map (Eina_Matrix3 *m, const Eina_Quad *src, const Eina_Quad *dst)
Creates a projective matrix that maps a quadrangle to a quadrangle.
EINA_API Eina_Bool eina_matrix3_square_quad_map (Eina_Matrix3 *m, const Eina_Quad *q)
Creates a matrix for unit-square to quad mapping.
EINA_API Eina_Bool eina_matrix3_quad_square_map (Eina_Matrix3 *m, const Eina_Quad *q)
Creates a matrix for mapping squares to match quad.
EINA_API void eina_matrix3_array_set (Eina_Matrix3 *m, const double *v)
Sets matrix values using an array.
EINA_API void eina_matrix3_copy (Eina_Matrix3 *dst, const Eina_Matrix3 *src)
Copies a matrix.
EINA_API void eina_matrix3_multiply (Eina_Matrix3 *out, const Eina_Matrix3 *mat_a, const Eina_Matrix3 *mat_b)
Multiplies two matrices.
EINA_API void eina_matrix3_multiply_copy (Eina_Matrix3 *out, const Eina_Matrix3 *mat_a, const Eina_Matrix3 *mat_b)
Multiplies two matrices without overwriting them.
EINA_API void eina_matrix3_scale_transform_set (Eina_Matrix3 *out, double s_x, double s_y)
Sets the scale parameters (XX, YY) of a matrix.
EINA_API void eina_matrix3_position_transform_set (Eina_Matrix3 *out, const double p_x, const double p_y)
Sets the positional parameters (XZ, YZ) of a matrix.
EINA_API void eina_normal3_matrix_get (Eina_Matrix3 *out, const Eina_Matrix4 *m)
Sets normal of the given matrix.
EINA_API void eina_matrix3_matrix4_to (Eina_Matrix4 *m4, const Eina_Matrix3 *m3)
Converts an Eina_Matrix3 into an Eina_Matrix4.

Detailed Description

Definition and operations for 3x3 matrices.

Macro Definition Documentation

  #define EINA_MATRIX3_ARGS(m)
Value:

    (m)->xx, (m)->xy, (m)->xz,     (m)->yx, (m)->yy, (m)->yz,                              (m)->zx, (m)->zy, (m)->zz

Helper macro for printf formatting arg.

Function Documentation

  EINA_API Eina_Matrix_Type eina_matrix3_type_get (const Eina_Matrix3 * m)

Returns the type of the given floating point matrix.

Parameters
    m The floating point matrix.

Returns
    The type of the matrix.

This function returns the type of the matrix m. No check is done on m.

Since
    1.14

References EINA_DBL_EQ, EINA_MATRIX_TYPE_AFFINE, EINA_MATRIX_TYPE_IDENTITY, and EINA_MATRIX_TYPE_PROJECTIVE.

Referenced by eina_matrix3_multiply().

  EINA_API void eina_matrix3_values_set (Eina_Matrix3 * m, double xx, double xy, double xz, double yx, double yy, double yz, double zx, double zy, double zz)

Sets the values of the coefficients of the given floating point matrix.

Parameters
    m The floating point matrix.
    xx The first coefficient value.
    xy The second coefficient value.
    xz The third coefficient value.
    yx The fourth coefficient value.
    yy The fifth coefficient value.
    yz The sixth coefficient value.
    zx The seventh coefficient value.
    zy The eighth coefficient value.
    zz The ninth coefficient value.

This function sets the values of the coefficients of the matrix m. No check is done on m.

See also
    eina_matrix3_values_get()

Since
    1.14

  EINA_API void eina_matrix3_values_get (const Eina_Matrix3 * m, double * xx, double * xy, double * xz, double * yx, double * yy, double * yz, double * zx, double * zy, double * zz)

Gets the values of the coefficients of the given floating point matrix.

Parameters
    m The floating point matrix.
    xx The first coefficient value.
    xy The second coefficient value.
    xz The third coefficient value.
    yx The fourth coefficient value.
    yy The fifth coefficient value.
    yz The sixth coefficient value.
    zx The seventh coefficient value.
    zy The eighth coefficient value.
    zz The ninth coefficient value.

This function gets the values of the coefficients of the matrix m. No check is done on m.

See also
    eina_matrix3_values_set()

Since
    1.14

  EINA_API void eina_matrix3_fixed_values_get (const Eina_Matrix3 * m, Eina_F16p16 * xx, Eina_F16p16 * xy, Eina_F16p16 * xz, Eina_F16p16 * yx, Eina_F16p16 * yy, Eina_F16p16 * yz, Eina_F16p16 * zx, Eina_F16p16 * zy, Eina_F16p16 * zz)

Gets the values of the coefficients of the given fixed point matrix.

Parameters
    m The fixed point matrix.
    xx The first coefficient value.
    xy The second coefficient value.
    xz The third coefficient value.
    yx The fourth coefficient value.
    yy The fifth coefficient value.
    yz The sixth coefficient value.
    zx The seventh coefficient value.
    zy The eighth coefficient value.
    zz The nine-th coefficient value.

This function gets the values of the coefficients of the matrix m. No check is done on m.

See also
    eina_matrix3_values_set()

Since
    1.14

References eina_f16p16_double_from().

Referenced by eina_matrix3_matrix3_f16p16_to().

  EINA_API void eina_matrix3_matrix3_f16p16_to (const Eina_Matrix3 * m, Eina_Matrix3_F16p16 * fm)

Transforms the given floating point matrix to the given fixed point matrix.

Parameters
    m The floating point matrix.
    fm The fixed point matrix.

This function transforms the floating point matrix m to a fixed point matrix and stores the coefficients into the fixed point matrix fm.

Since
    1.14

References eina_matrix3_fixed_values_get().

  EINA_API Eina_Bool eina_matrix3_equal (const Eina_Matrix3 * m1, const Eina_Matrix3 * m2)

Checks whether the two matrices are equivalent.

Parameters
    m1 The first matrix.
    m2 The second matrix.

Returns
    EINA_TRUE if the two matrices are equal, EINA_FALSE otherwise.

This function returns EINA_TRUE if the matrices m1 and m2 are equal, EINA_FALSE otherwise. No check is done on the matrices.

Since
    1.14

References EINA_DBL_EQ, EINA_FALSE, EINA_TRUE, _Eina_Matrix3::xx, _Eina_Matrix3::xy, _Eina_Matrix3::xz, _Eina_Matrix3::yx, _Eina_Matrix3::yy, _Eina_Matrix3::yz, _Eina_Matrix3::zx, _Eina_Matrix3::zy, and _Eina_Matrix3::zz.

  EINA_API void eina_matrix3_compose (const Eina_Matrix3 * m1, const Eina_Matrix3 * m2, Eina_Matrix3 * dst)

Sets dst as the matrix multiplication (composition) of two matrices.

Parameters
    m1 The first matrix. Must be non-NULL.
    m2 The second matrix. Must be non-NULL.
    dst The results matrix.

In matrix multiplication, AB, the resultant matrix is created from the rows of A multiplied against the columns of B and summed. This is not commutative; i.e. AB != BA, so the ordering of arguments m1 and m2 matters.

Since
    1.14

Referenced by eina_matrix3_multiply(), eina_matrix3_quad_quad_map(), eina_matrix3_rotate(), eina_matrix3_scale(), and eina_matrix3_translate().

  EINA_API void eina_matrix3_translate (Eina_Matrix3 * m, double tx, double ty)

Sets the matrix values for a translation operation.

Parameters
    m The matrix.
    tx The X coordinate translation.
    ty The Y coordinate translation.

Since
    1.14

References eina_matrix3_compose().

  EINA_API void eina_matrix3_scale (Eina_Matrix3 * m, double sx, double sy)

Sets the matrix values for a scaling operation.

Parameters
    m The matrix.
    sx The X coordinate scaling factor.
    sy The Y coordinate scaling factor.

Since
    1.14

References eina_matrix3_compose().

  EINA_API void eina_matrix3_rotate (Eina_Matrix3 * m, double rad)

Sets the matrix values for a rotation operation.

Parameters
    m The matrix.
    rad The number of radians to rotate.

Since
    1.14

References eina_matrix3_compose().

  EINA_API void eina_matrix3_identity (Eina_Matrix3 * m)

Sets the given floating point matrix to the identity matrix.

Parameters
    m The matrix to set to identity.

This function sets m to the identity matrix. No check is done on m.

Since
    1.14

Referenced by eina_matrix3_inverse(), eina_matrix3_position_transform_set(), and eina_matrix3_scale_transform_set().

  EINA_API double eina_matrix3_determinant (const Eina_Matrix3 * m)

Calculates the determinant of the given matrix.

Parameters
    m The matrix.

Returns
    The determinant.

This function returns the determinant of the matrix m. No check is done on m.

Since
    1.14

Referenced by eina_matrix3_inverse().

  EINA_API void eina_matrix3_divide (Eina_Matrix3 * m, double scalar)

Divides the given matrix by a scalar number.

Parameters
    m The matrix.
    scalar The scalar number.

This function divides the matrix m by scalar. No check is done on m.

Since
    1.14

Referenced by eina_matrix3_inverse(), and eina_matrix3_quad_square_map().

  EINA_API void eina_matrix3_inverse (const Eina_Matrix3 * m, Eina_Matrix3 * m2)

Computes the inverse of the given matrix.

Parameters
    m The source matrix.
    m2 The inverse matrix.

This function inverts the matrix m and stores the result in m2. No check is done on m or m2. If m cannot be inverted, then m2 is set to the identity matrix.

Since
    1.14

References EINA_DBL_EQ, eina_matrix3_adjoint(), eina_matrix3_determinant(), eina_matrix3_divide(), and eina_matrix3_identity().

Referenced by eina_matrix3_quad_square_map().

  EINA_API void eina_matrix3_transpose (const Eina_Matrix3 * m, Eina_Matrix3 * a)

Computes the transpose of the given matrix.

Parameters
    m The source matrix.
    a The transposed matrix.

This function transposes the matrix m and stores the result in a. No check is done on m or a. The transpose of a matrix essentially flips a matrix over its diagonal.

Since
    1.14

Referenced by eina_matrix3_adjoint().

  EINA_API void eina_matrix3_cofactor (const Eina_Matrix3 * m, Eina_Matrix3 * a)

Computes the cofactor of the given matrix.

Parameters
    m The source matrix.
    a The cofactored matrix.

This function cofactors the matrix m and stores the result in a. No check is done on m or a. The cofactor of a matrix3 at row i, column j is computed by taking the determinant of the submatrix formed by deleting the i-th row and j-th column, and then multiplying by (-1)^(i+j).

Since
    1.14

Referenced by eina_matrix3_adjoint().

  EINA_API void eina_matrix3_adjoint (const Eina_Matrix3 * m, Eina_Matrix3 * a)

Computes the adjoint of the given matrix.

Parameters
    m The matrix to be adjointed.
    a The adjoint matrix.

This function finds the adjoint of the matrix m and stores the result in a. No check is done on m or a. The adjoint of a matrix3 is effectively the transpose of its cofactor.

Since
    1.14

References eina_matrix3_cofactor(), and eina_matrix3_transpose().

Referenced by eina_matrix3_inverse().

  EINA_API void eina_matrix3_point_transform (const Eina_Matrix3 * m, double x, double y, double * xr, double * yr)

Computes the transform of a 2D point using the given matrix.

Parameters
    m The transformation matrix to apply.
    x The x point to be transformed.
    y The y point to be transformed.
    xr The transformed x point.
    yr The transformed y point.

Applies the transformation matrix m to the point (x,y), and stores the result in (*xr,*yr). No check is done on m; xr and yr must point to valid memory. A fast-path is included for if the zx and zy components of the matrix are zero.

Since
    1.14

References EINA_DBL_EQ.

Referenced by eina_matrix3_rectangle_transform().

  EINA_API void eina_matrix3_rectangle_transform (const Eina_Matrix3 * m, const Eina_Rectangle * r, const Eina_Quad * q)

Computes the transformation of a rectangle using the given matrix.

Parameters
    m The transformation matrix to apply.
    r The rectangle to be transformed.
    q The resultant transformed points.

Performs a point transformation of each corner of the rectangle r, and stores the result in the quadrangle q. No checks are done on the inputs, and q must point to valid memory.

Since
    1.14

References eina_matrix3_point_transform().

  EINA_API Eina_Bool eina_matrix3_quad_quad_map (Eina_Matrix3 * m, const Eina_Quad * src, const Eina_Quad * dst)

Creates a projective matrix that maps a quadrangle to a quadrangle.

Parameters
    m The transformation matrix to create.
    src The source quadrangle.
    dst The destination quadrangle.

Returns
    EINA_TRUE if matrix could be successfully created, EINA_FALSE otherwise.

Calculates a matrix m that can be used to transform from an arbitrary source quadrangle src to another arbitrary quadrangle dst.

References EINA_FALSE, eina_matrix3_compose(), eina_matrix3_quad_square_map(), eina_matrix3_square_quad_map(), and EINA_TRUE.

  EINA_API Eina_Bool eina_matrix3_square_quad_map (Eina_Matrix3 * m, const Eina_Quad * q)

Creates a matrix for unit-square to quad mapping.

Parameters
    m The transformation matrix to create.
    q The source quadrangle.

Returns
    EINA_TRUE if matrix could be successfully created, EINA_FALSE otherwise.

Calculates a matrix m that can be used to transform an arbitrary quadrangle q into a square. If q is a parallelogram, then a fast path affine transformation is used, otherwise it computes the matrix using a full projective transformation operation. No other checks are done on m or q.

Since
    1.14

References EINA_DBL_EQ, EINA_FALSE, and EINA_TRUE.

Referenced by eina_matrix3_quad_quad_map(), and eina_matrix3_quad_square_map().

  EINA_API Eina_Bool eina_matrix3_quad_square_map (Eina_Matrix3 * m, const Eina_Quad * q)

Creates a matrix for mapping squares to match quad.

Parameters
    m The transformation matrix to create.
    q The source quadrangle.

Returns
    EINA_FALSE on successful transform creation, EINA_FALSE otherwise.

Calculates a matrix m that can be used to transform a square to fit a given quadrangle. The created matrix will always have its zz element equal to 1.0. The m matrix and q quad must be valid memory.

Since
    1.14

References EINA_DBL_EQ, EINA_FALSE, eina_matrix3_divide(), eina_matrix3_inverse(), eina_matrix3_square_quad_map(), and EINA_TRUE.

Referenced by eina_matrix3_quad_quad_map().

  EINA_API void eina_matrix3_array_set (Eina_Matrix3 * m, const double * v)

Sets matrix values using an array.

Parameters
    m The result matrix.
    v The array[9] of values.

Uses the first 9 elements in the given C array v to set the values in the matrix m. The values will be set in the order of the elements in the Eina_Matrix3 structure.

Since
    1.17

  EINA_API void eina_matrix3_copy (Eina_Matrix3 * dst, const Eina_Matrix3 * src)

Copies a matrix.

Parameters
    dst Copy of the matrix.
    src The matrix to copy.

Since
    1.16

Referenced by eina_matrix3_multiply(), and eina_matrix3_multiply_copy().

  EINA_API void eina_matrix3_multiply (Eina_Matrix3 * out, const Eina_Matrix3 * mat_a, const Eina_Matrix3 * mat_b)

Multiplies two matrices.

Parameters
    out The resulting matrix.
    mat_a The first member of the multiplication.
    mat_b The second member of the multiplication.

out must not point to the same structure as mat_a or mat_b, else the calculation results will be incorrect. Use eina_matrix3_multiply_copy() instead in this case.

Since
    1.17

References eina_matrix3_compose(), eina_matrix3_copy(), eina_matrix3_type_get(), and EINA_MATRIX_TYPE_IDENTITY.

Referenced by eina_matrix3_multiply_copy().

  EINA_API void eina_matrix3_multiply_copy (Eina_Matrix3 * out, const Eina_Matrix3 * mat_a, const Eina_Matrix3 * mat_b)

Multiplies two matrices without overwriting them.

Parameters
    out The resulting matrix.
    mat_a The first member of the multiplication.
    mat_b The second member of the multiplication.

Safely multiplies mat_a and mat_b by checking if the out parameter points to either of them, and if so uses a temporary matrix for the intermediary calculations.

Since
    1.17

References eina_matrix3_copy(), and eina_matrix3_multiply().

  EINA_API void eina_matrix3_scale_transform_set (Eina_Matrix3 * out, double s_x, double s_y)

Sets the scale parameters (XX, YY) of a matrix.

Parameters
    out The resulting matrix.
    s_x The scale value for x.
    s_y The scale value for y.

Sets only the XX and YY components of the matrix, leaving the rest of the matrix as it was.

Since
    1.17

References eina_matrix3_identity().

  EINA_API void eina_matrix3_position_transform_set (Eina_Matrix3 * out, const double p_x, const double p_y)

Sets the positional parameters (XZ, YZ) of a matrix.

Parameters
    out The resulting matrix.
    p_x The position value for x.
    p_y The position value for y.

Sets only the XZ and YZ components of the matrix, leaving the rest of the matrix as it was.

Since
    1.17

References eina_matrix3_identity().

  EINA_API void eina_normal3_matrix_get (Eina_Matrix3 * out, const Eina_Matrix4 * m)

Sets normal of the given matrix.

Parameters
    out The resulting matrix.
    m The matrix.

Since
    1.17

  EINA_API void eina_matrix3_matrix4_to (Eina_Matrix4 * m4, const Eina_Matrix3 * m3)

Converts an Eina_Matrix3 into an Eina_Matrix4.

Parameters
    m3 The destination Eina_Matrix3.
    m4 The source Eina_Matrix4.

Since
    1.15

Author

Generated automatically by Doxygen for EFL from the source code.