summaryrefslogtreecommitdiff
path: root/doc/tutorial
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@behdad.org>2008-04-15 15:57:41 -0400
committerBehdad Esfahbod <behdad@behdad.org>2008-04-15 15:57:41 -0400
commit12831201d2461ae4452d91ad42bf74881da12e04 (patch)
tree4d9104e32ac448f89b64ce5619f3828ac7de4e9e /doc/tutorial
parentcafdd0161941413547d253c743c743323e790400 (diff)
[doc/tutorial/src/singular.c] Fix a bug in delta computation
Diffstat (limited to 'doc/tutorial')
-rw-r--r--doc/tutorial/src/singular.c38
1 files changed, 21 insertions, 17 deletions
diff --git a/doc/tutorial/src/singular.c b/doc/tutorial/src/singular.c
index 241d342f5..958b2b047 100644
--- a/doc/tutorial/src/singular.c
+++ b/doc/tutorial/src/singular.c
@@ -58,19 +58,21 @@ get_singular_values (const cairo_matrix_t *matrix,
double *major,
double *minor)
{
- double xx = matrix->xx, xy = matrix->xy;
- double yx = matrix->yx, yy = matrix->yy;
+ double xx = matrix->xx, xy = matrix->xy;
+ double yx = matrix->yx, yy = matrix->yy;
- double a = xx*xx+yx*yx;
- double b = xy*xy+yy*yy;
- double k = xx*xy+yx*yy;
+ double a = xx*xx+yx*yx;
+ double b = xy*xy+yy*yy;
+ double k = xx*xy+yx*yy;
- double f = (a+b) * .5;
- double g = (a-b) * .5;
- double delta = sqrt (g + k*k);
+ double f = (a+b) * .5;
+ double g = (a-b) * .5;
+ double delta = sqrt (g*g + k*k);
- *major = sqrt (f + delta);
- *minor = sqrt (f - delta);
+ if (major)
+ *major = sqrt (f + delta);
+ if (minor)
+ *minor = sqrt (f - delta);
}
/*
@@ -84,16 +86,18 @@ get_pen_axes (cairo_t *cr,
double *major,
double *minor)
{
- double width;
- cairo_matrix_t matrix;
+ double width;
+ cairo_matrix_t matrix;
- width = cairo_get_line_width (cr);
- cairo_get_matrix (cr, &matrix);
+ width = cairo_get_line_width (cr);
+ cairo_get_matrix (cr, &matrix);
- get_singular_values (&matrix, major, minor);
+ get_singular_values (&matrix, major, minor);
- *major *= width;
- *minor *= width;
+ if (major)
+ *major *= width;
+ if (minor)
+ *minor *= width;
}
static void