# [cairo] Reduce number of floating point operations

Jeff Smith whydoubt at yahoo.com
Wed Sep 20 11:46:27 PDT 2006

```> >> +    /* memcmp() should be faster than 4 soft float operations */
> >> +    static const cairo_matrix_t identity = {
> >> +           1.0, 0.0,
> >> +           0.0, 1.0,
> >> +           0.0, 0.0
> >> +    };
> >> +    return (memcmp (matrix, &identity, 4 * sizeof(double)) == 0);
> >> +#else
> >>      return (matrix->xx == 1.0 && matrix->yx == 0.0 &&
> >> -           matrix->xy == 0.0 && matrix->yy == 1.0 &&
> >> -           matrix->x0 == 0.0 && matrix->y0 == 0.0);
> >> +           matrix->xy == 0.0 && matrix->yy == 1.0);
> >> +#endif
> >>
> >
> > Why is it called is_identity if it doesn't check for translation?
> >
> According to wikipedia (http://en.wikipedia.org/wiki/Identity_matrix)
> identity matrix is n x n, so third row in cairo_matrix_t actually is a
> translation vector.

In 2D graphics we use a 3x3 matrix.  In normalized form, the last column (or row,
depending on how you set up your orientation) will (with one exception) always contain
[0]
[0]
[1]
which is always implied when using the commonly-seen six-element form, as in the case of
cairo_matrix_t.  So we really are checking for the identity matrix
[1 0 0]
[0 1 0]
[0 0 1]
but the final column is implicit, so we can (and need) only handle and test against
[1 0]
[0 1]
[0 0]

-- Jeff "Pedantic" Smith

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
```