Re: [css3-2d-transforms] Interop: matrix() values e,f <number> or <length>

On Thu, Nov 18, 2010 at 7:08 PM, Boris Zbarsky <bzbarsky@mit.edu> wrote:
> On 11/18/10 9:36 PM, Brendan Kenny wrote:
>>
>> Absolutely, but I think in almost all cases the translate function is
>> a better option for that.
>
> Sure, but various CSSOM apis (e.g. computed style on a transitioning
> element) will spit out matrix().
>
>> Most matrix transform functions will
>> probably be generated from a calculation of some sort, and it's not
>> clear to me how one would even calculate, for instance, a rotation
>> applied to a translation specified in one of the available units
>> without knowing the scale factor between the two at calculation time.
>
> I'm not sure what the issue there is, actually... �Applying a rotation to a
> translation Just Works. �Here's an example:
>
> ( �cos(x) �-sin(x) �0 ) ( 1 � 0 � 2em )
> ( �sin(x) �cos(x) � 0 ) ( 0 � 1 � 3ex )
> ( � 0 � � � �0 � � �1 ) ( 0 � 0 � �1 �)
>
> That's applying a rotation by x to a (2em, 3ex) translation. �Just doing out
> the multiplication gives us:
>
> �( cos(x) -sin(x) �2em*cos(x) - 3ex*sin(x) )
> �( sin(x) �cos(x) �2em*sin(x) + 3ex*cos(x) )
> �( � 0 � � � �0 � � � � � � � 1 � � � � � �)

ouch, yeah, I was thinking of the general case, and not even the right
way around.

> [snip]
> I don't follow this last part. �How can it possibly make sense to make the
> linear part of the matrix have length units, when it's being multiplied by
> lengths (whereas the translation part is being _added_ to lengths)? �Unit
> analysis failure, sorry. �;)

yeah...

>> I'm sure such authors will be a tiny minority. On the other hand, if
>> anyone copies and pastes a matrix from any kind of graphics text, it's
>> all but certain that units won't be included.
>
> True; all such texts assume a predefined coordinate system. �CSS doesn't
> have one.

> CSS has no concept of user units (or even of a current coordinate system,
> which is necessary to define user units in the first place), so the only way
> to handle the e and f values of the transform matrix is to do one of the
> following:
> 1) Have the spec assume an arbitrary unit for them and specify what it
> � is (which it doesn't). �I assume webkit makes just such an arbitrary
> � unit choice; which one? �This makes the entries _look_ like numbers
> � to web developers, even though they're no such thing.
> 2) Have these be specified with length units in the matrix (what Gecko
> � does). �This makes the fact that they're lengths explicit.
> 3) Go ahead and try to actually define something akin to user units and
> � try to graft it onto CSS somehow. �Apart from conceptual purity and
> � a feeling of well-being and contentment, this is fundamentally the
> � same as option 1, as far as I can see.

I'll have to get some sleep and then think about this, but it does
seem that I am aiming for option 3 which would indeed be a de facto
option 1. Conceding the point for the moment, any ideas on matrix3d(),
since, as was pointed out[1], some kind of inverse length unit would
be required?

[1] http://lists.w3.org/Archives/Public/www-style/2009Oct/0360.html (again)

Received on Friday, 19 November 2010 03:45:41 UTC