W3C home > Mailing lists > Public > www-svg@w3.org > June 2012

Re: [css3-transforms] neutral element for addition - by animation

From: Dirk Schulze <dschulze@adobe.com>
Date: Fri, 1 Jun 2012 15:07:14 -0700
To: "Dr. Olaf Hoffmann" <Dr.O.Hoffmann@gmx.de>
CC: "www-svg@w3.org" <www-svg@w3.org>, "public-fx@w3.org" <public-fx@w3.org>
Message-ID: <D6A68CA3-6F52-4BB6-95B1-6DC1F187B8D2@adobe.com>

On Jun 1, 2012, at 1:51 AM, Dr. Olaf Hoffmann wrote:

> Cyril Concolato:
>> [CC] Adding 1 in the scale transformation means going from scale(X) to 
> scale(X+1), therefore the neutral element is scale(0) which is the identity 
> matrix.
> scale(0) is not the identity matrix, this is obviously scale(1,1),
> because
> (0,0) = scale(0,0) * (x,y) and for arbitrary x,y it is of course in most
> cases (x, y) <> (0,0); scale(0,0) is no representation of the identity matrix.
> but
> (x,y) = scale(1,1) * (x,y);  scale(1,1) is a representation of the identity 
> matrix.
> On the other hand the identity matrix has nothing to do with additive
> animation or the neutral element of addition, therefore there is no
> need, that it is the same. The identiy matrix is the neutral element
> of matrix multiplication, what is a completely different operation.
Like Cyril wrote, it was just a typo from him.

> For the operation of addition of matrices M:  0:=scale(0,0) represents 
> a neutral element M = M + 0 = 0 + M, but typically this is not very
> important for transformations in SVG or CSS.
I added a first draft of  the definition for the 'neutral element of addition' to CSS Transforms [1]. The only problem that I see is with 'matrix', 'matrix3d' and 'perspective'. According to the definition of SMIL the values should be 0 (list of 0) as well. This would be a non-invertible matrix for 'matrix' and 'matrix3d' and a undefined matrix for 'perspective'. The interpolation chapter for matrices does not allow interpolation with non-invertible matrices [2]. Therefore 'by' animations on these transform functions will fall back to discrete animations and cause the element not to be displayed for half of the animation [3].

Of course it could be possible to linearly interpolate every component of a matrix, but since this is not the desired effect for most use cases, we use decomposing of matrices before interpolations.

[1] http://dev.w3.org/csswg/css3-transforms/#neutral-element
[2] http://dev.w3.org/csswg/css3-transforms/#matrix-interpolation
[3] http://dev.w3.org/csswg/css3-transforms/#transform-function-lists

> The scale function could have been defined in the passed in
> such a way, that the identity matrix results from the neutral
> element of addtion, this works for example in this way:
> scale(a,b) means scaling factors exp(a) and exp(b).
> But this would exclude mirroring and is maybe more
> difficult to estimate the effect for some authors.
> A Taylor expansion approximation by replacing
> exp(a) by (a+1) could save the mirroring, but not the
> intuitive understanding of scaling.
> Therefore there is no simple and intuitive solution to
> satisfy all expectations - and too late to change the 
> definition anyway.
I would also think it gets to complicated for most authors.

> Olaf  

Received on Friday, 1 June 2012 22:08:51 UTC

This archive was generated by hypermail 2.3.1 : Wednesday, 8 March 2017 09:47:28 UTC