[lasem/wip/emmanuel/extents] svg_matrix: add a is_invertible function
- From: Emmanuel Pacaud <emmanuel src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [lasem/wip/emmanuel/extents] svg_matrix: add a is_invertible function
- Date: Mon, 11 Jul 2016 09:38:33 +0000 (UTC)
commit 80933a6c70331b37ad68b8c0c038c30b1dab46ce
Author: Emmanuel Pacaud <emmanuel gnome org>
Date: Mon Jul 11 11:37:15 2016 +0200
svg_matrix: add a is_invertible function
src/lsmsvgmatrix.c | 16 ++++++++++++++++
src/lsmsvgmatrix.h | 3 ++-
2 files changed, 18 insertions(+), 1 deletions(-)
---
diff --git a/src/lsmsvgmatrix.c b/src/lsmsvgmatrix.c
index 895ba6c..fa23484 100644
--- a/src/lsmsvgmatrix.c
+++ b/src/lsmsvgmatrix.c
@@ -30,6 +30,22 @@ lsm_svg_matrix_is_identity (const LsmSvgMatrix *matrix)
return ((matrix->flags & LSM_SVG_MATRIX_FLAGS_IDENTITY) != 0);
}
+static double
+_compute_determinant (const LsmSvgMatrix *matrix)
+{
+ return matrix->a * matrix->d - matrix->b * matrix->c;
+}
+
+gboolean
+lsm_svg_matrix_is_invertible (const LsmSvgMatrix *matrix)
+{
+ double det;
+
+ det = _compute_determinant (matrix);
+
+ return isfinite (det) && det != 0.;
+}
+
void
lsm_svg_matrix_init (LsmSvgMatrix *matrix, double a, double b, double c, double d, double e, double f)
{
diff --git a/src/lsmsvgmatrix.h b/src/lsmsvgmatrix.h
index 22a88b8..9604fb1 100644
--- a/src/lsmsvgmatrix.h
+++ b/src/lsmsvgmatrix.h
@@ -35,7 +35,8 @@ typedef struct {
LsmSvgMatrixFlags flags;
} LsmSvgMatrix;
-gboolean lsm_svg_matrix_is_identity (const LsmSvgMatrix *matrix);
+gboolean lsm_svg_matrix_is_identity (const LsmSvgMatrix *matrix);
+gboolean lsm_svg_matrix_is_invertible (const LsmSvgMatrix *matrix);
void lsm_svg_matrix_init (LsmSvgMatrix *matrix, double a, double b,
double c, double d,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]