diff options
author | Behdad Esfahbod <behdad@behdad.org> | 2008-04-15 15:57:41 -0400 |
---|---|---|
committer | Behdad Esfahbod <behdad@behdad.org> | 2008-04-15 15:57:41 -0400 |
commit | 12831201d2461ae4452d91ad42bf74881da12e04 (patch) | |
tree | 4d9104e32ac448f89b64ce5619f3828ac7de4e9e /doc/tutorial | |
parent | cafdd0161941413547d253c743c743323e790400 (diff) |
[doc/tutorial/src/singular.c] Fix a bug in delta computation
Diffstat (limited to 'doc/tutorial')
-rw-r--r-- | doc/tutorial/src/singular.c | 38 |
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 |