Tizen Native API  7.0
3x3 floating point matrices

Definition and operations for 3x3 matrices.

## Functions

Eina_Matrix_Type eina_matrix3_type_get (const Eina_Matrix3 *m)
Returns the type of the given floating point matrix.
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.
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.
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.
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_Bool eina_matrix3_equal (const Eina_Matrix3 *m1, const Eina_Matrix3 *m2)
Checks whether the two matrices are equivalent.
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.
void eina_matrix3_translate (Eina_Matrix3 *m, double tx, double ty)
Sets the matrix values for a translation operation.
void eina_matrix3_scale (Eina_Matrix3 *m, double sx, double sy)
Sets the matrix values for a scaling operation.
void eina_matrix3_rotate (Eina_Matrix3 *m, double rad)
Sets the matrix values for a rotation operation.
void eina_matrix3_identity (Eina_Matrix3 *m)
Sets the given floating point matrix to the identity matrix.
double eina_matrix3_determinant (const Eina_Matrix3 *m)
Calculates the determinant of the given matrix.
void eina_matrix3_divide (Eina_Matrix3 *m, double scalar)
Divides the given matrix by a scalar number.
void eina_matrix3_inverse (const Eina_Matrix3 *m, Eina_Matrix3 *m2)
Computes the inverse of the given matrix.
void eina_matrix3_transpose (const Eina_Matrix3 *m, Eina_Matrix3 *a)
Computes the transpose of the given matrix.
void eina_matrix3_cofactor (const Eina_Matrix3 *m, Eina_Matrix3 *a)
Computes the cofactor of the given matrix.
void eina_matrix3_adjoint (const Eina_Matrix3 *m, Eina_Matrix3 *a)
Computes the adjoint of the given matrix.
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.
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.
Creates a matrix for unit-square to quad mapping.
Creates a matrix for mapping squares to match quad.
void eina_matrix3_array_set (Eina_Matrix3 *m, const double *v)
Sets matrix values using an array.
void eina_matrix3_copy (Eina_Matrix3 *dst, const Eina_Matrix3 *src)
Copies a matrix.
void eina_matrix3_multiply (Eina_Matrix3 *out, const Eina_Matrix3 *mat_a, const Eina_Matrix3 *mat_b)
Multiplies two matrices.
void eina_matrix3_multiply_copy (Eina_Matrix3 *out, const Eina_Matrix3 *mat_a, const Eina_Matrix3 *mat_b)
Multiplies two matrices without overwriting them.
void eina_matrix3_scale_transform_set (Eina_Matrix3 *out, double s_x, double s_y)
Sets the scale parameters (XX, YY) of a matrix.
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.
void eina_normal3_matrix_get (Eina_Matrix3 *out, const Eina_Matrix4 *m)
Sets normal of the given matrix.
void eina_matrix3_matrix4_to (Eina_Matrix4 *m4, const Eina_Matrix3 *m3)
Converts an Eina_Matrix3 into an Eina_Matrix4.

## Typedefs

typedef struct _Eina_Matrix3 Eina_Matrix3

## Defines

#define EINA_MATRIX3_FORMAT   "g %g %g | %g %g %g | %g %g %g"
#define EINA_MATRIX3_ARGS(m)

## Define 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

 #define EINA_MATRIX3_FORMAT   "g %g %g | %g %g %g | %g %g %g"

Helper macro for printf formatting

## Typedef Documentation

A 3x3 floating point matrix.

## Function Documentation

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

Computes the adjoint of the given matrix.

Parameters:
 [in] m The matrix to be adjointed. [out] 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 (EFL) :
1.14
Since :
3.0
 void eina_matrix3_array_set ( Eina_Matrix3 * m, const double * v )

Sets matrix values using an array.

Parameters:
 [out] m The result matrix. [in] v The array 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 (EFL) :
1.17
Since :
3.0
 void eina_matrix3_cofactor ( const Eina_Matrix3 * m, Eina_Matrix3 * a )

Computes the cofactor of the given matrix.

Parameters:
 [in] m The source matrix. [out] 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 (EFL) :
1.14
Since :
3.0
 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:
 [in] m1 The first matrix. Must be non-NULL. [in] m2 The second matrix. Must be non-NULL. [out] 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 (EFL) :
1.14
Since :
3.0
 void eina_matrix3_copy ( Eina_Matrix3 * dst, const Eina_Matrix3 * src )

Copies a matrix.

Parameters:
 [out] dst Copy of the matrix. [in] src The matrix to copy.
Since (EFL) :
1.16
Since :
3.0
 double eina_matrix3_determinant ( const Eina_Matrix3 * m )

Calculates the determinant of the given matrix.

Parameters:
 [in] m The matrix.
Returns:
The determinant.

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

Since (EFL) :
1.14
Since :
3.0
 void eina_matrix3_divide ( Eina_Matrix3 * m, double scalar )

Divides the given matrix by a scalar number.

Parameters:
 [in,out] m The matrix. [in] scalar The scalar number.

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

Since (EFL) :
1.14
Since :
3.0
 Eina_Bool eina_matrix3_equal ( const Eina_Matrix3 * m1, const Eina_Matrix3 * m2 )

Checks whether the two matrices are equivalent.

Parameters:
 [in] m1 The first matrix. [in] 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 (EFL) :
1.14
Since :
3.0
 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:
 [in] m The fixed point matrix. [out] xx The first coefficient value. [out] xy The second coefficient value. [out] xz The third coefficient value. [out] yx The fourth coefficient value. [out] yy The fifth coefficient value. [out] yz The sixth coefficient value. [out] zx The seventh coefficient value. [out] zy The eighth coefficient value. [out] zz The nine-th coefficient value.

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

eina_matrix3_values_set()
Since (EFL) :
1.14
Since :
3.0
 void eina_matrix3_identity ( Eina_Matrix3 * m )

Sets the given floating point matrix to the identity matrix.

Parameters:
 [out] m The matrix to set to identity.

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

Since (EFL) :
1.14
Since :
3.0
 void eina_matrix3_inverse ( const Eina_Matrix3 * m, Eina_Matrix3 * m2 )

Computes the inverse of the given matrix.

Parameters:
 [in] m The source matrix. [out] 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 (EFL) :
1.14
Since :
3.0
 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:
 [in] m The floating point matrix. [out] 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 (EFL) :
1.14
Since :
3.0
 void eina_matrix3_matrix4_to ( Eina_Matrix4 * m4, const Eina_Matrix3 * m3 )

Converts an Eina_Matrix3 into an Eina_Matrix4.

Parameters:
 [out] m3 The destination Eina_Matrix3. [in] m4 The source Eina_Matrix4.
Since (EFL) :
1.15
Since :
3.0
 void eina_matrix3_multiply ( Eina_Matrix3 * out, const Eina_Matrix3 * mat_a, const Eina_Matrix3 * mat_b )

Multiplies two matrices.

Parameters:
 [out] out The resulting matrix. [in] mat_a The first member of the multiplication. [in] 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 (EFL) :
1.17
Since :
3.0
 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] out The resulting matrix. [in] mat_a The first member of the multiplication. [in] 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 (EFL) :
1.17
Since :
3.0
 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:
 [in] m The transformation matrix to apply. [in] x The x point to be transformed. [in] y The y point to be transformed. [out] xr The transformed x point. [out] 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 (EFL) :
1.14
Since :
3.0
 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] out The resulting matrix. [in] p_x The position value for x. [in] 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 (EFL) :
1.17
Since :
3.0

Parameters:
 [out] m The transformation matrix to create. [in] src The source quadrangle. [in] 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`.

Since :
3.0

Creates a matrix for mapping squares to match quad.

Parameters:
 [out] m The transformation matrix to create. [in] 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 (EFL) :
1.14
Since :
3.0
 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:
 [in] m The transformation matrix to apply. [in] r The rectangle to be transformed. [out] 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 (EFL) :
1.14
Since :
3.0
 void eina_matrix3_rotate ( Eina_Matrix3 * m, double rad )

Sets the matrix values for a rotation operation.

Parameters:
 [out] m The matrix. [in] rad The number of radians to rotate.
Since (EFL) :
1.14
Since :
3.0
 void eina_matrix3_scale ( Eina_Matrix3 * m, double sx, double sy )

Sets the matrix values for a scaling operation.

Parameters:
 [out] m The matrix. [in] sx The X coordinate scaling factor. [in] sy The Y coordinate scaling factor.
Since (EFL) :
1.14
Since :
3.0
 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] out The resulting matrix. [in] s_x The scale value for x. [in] 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 (EFL) :
1.17
Since :
3.0

Creates a matrix for unit-square to quad mapping.

Parameters:
 [out] m The transformation matrix to create. [in] 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 (EFL) :
1.14
Since :
3.0
 void eina_matrix3_translate ( Eina_Matrix3 * m, double tx, double ty )

Sets the matrix values for a translation operation.

Parameters:
 [out] m The matrix. [in] tx The X coordinate translation. [in] ty The Y coordinate translation.
Since (EFL) :
1.14
Since :
3.0
 void eina_matrix3_transpose ( const Eina_Matrix3 * m, Eina_Matrix3 * a )

Computes the transpose of the given matrix.

Parameters:
 [in] m The source matrix. [out] 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 (EFL) :
1.14
Since :
3.0
 Eina_Matrix_Type eina_matrix3_type_get ( const Eina_Matrix3 * m )

Returns the type of the given floating point matrix.

Parameters:
 [in] 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 (EFL) :
1.14
Since :
3.0
 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:
 [in] m The floating point matrix. [out] xx The first coefficient value. [out] xy The second coefficient value. [out] xz The third coefficient value. [out] yx The fourth coefficient value. [out] yy The fifth coefficient value. [out] yz The sixth coefficient value. [out] zx The seventh coefficient value. [out] zy The eighth coefficient value. [out] zz The ninth coefficient value.

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

eina_matrix3_values_set()
Since (EFL) :
1.14
Since :
3.0
 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:
 [out] m The floating point matrix. [in] xx The first coefficient value. [in] xy The second coefficient value. [in] xz The third coefficient value. [in] yx The fourth coefficient value. [in] yy The fifth coefficient value. [in] yz The sixth coefficient value. [in] zx The seventh coefficient value. [in] zy The eighth coefficient value. [in] zz The ninth coefficient value.

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

eina_matrix3_values_get()
Since (EFL) :
1.14
Since :
3.0
 void eina_normal3_matrix_get ( Eina_Matrix3 * out, const Eina_Matrix4 * m )

Sets normal of the given matrix.

Parameters:
 [out] out The resulting matrix. [in] m The matrix.
Since (EFL) :
1.17
Since :
3.0