W3C home > Mailing lists > Public > www-style@w3.org > February 2011

Re: [css3-2d-transforms] transform:matrix() questions

From: Boris Zbarsky <bzbarsky@MIT.EDU>
Date: Thu, 17 Feb 2011 23:20:52 -0500
Message-ID: <4D5DF3A4.9050607@mit.edu>
To: David Singer <singer@apple.com>
CC: w3-style@boblet.net, www-style <www-style@w3.org>
On 2/17/11 10:10 PM, David Singer wrote:
> I think it's more likely that we should have the equation (maybe we already do) that the point (x, y) is transformed into (x', y') by multiplying the vector (x, y, 1) with the matrix, i.e.
>
> x' = ax + by + c
> y' = dx + ey + f
>
> (if I have the order right, and if I don't, it's even more of a suggestion we should document it...)

The correct formulas are:

   x' = ax + cy + e
   y' = bx + dy + f

And yes, we should document this clearly.

We should also clarify the spec where it talks about how to handle 
'transform' values with multiple parts.  Right now the spec is at best 
vague and at worst self-contradictory.  Specifically, 
http://www.w3.org/TR/css3-2d-transforms/#transform-property says:

   The final transformation value for an element is obtained by
   performing a matrix concatenation of each entry in the list.

while http://www.w3.org/TR/css3-2d-transforms/#transform-functions says:

   The value of the transform property is a list of
   <transform-functions> applied in the order provided.

 From my testing, what Gecko and Webkit actually implement is the latter 
of these two spec quotes: the transformations are applied in the order 
provided.  Whether this matches the first quote depends on whether the 
reader reads "concatenation" as meaning "matrix multiplication", and if 
so whether the matrices are acting on the vectors from the right or from 
the left....  If they read it as being multiplication of left-acting 
matrices, then the transformation order is the opposite of the one the 
spec actually wants and what's implemented.

The simplest solution may be to take that first quoted bit out entirely; 
then we don't have to worry about matrix stuff except for matrix() 
itself, and that can be defined in terms of the explicit formula above.

-Boris
Received on Friday, 18 February 2011 04:22:01 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 17:20:37 GMT