Ian Hickson wrote:
On Mon, 19 Jul 2010, David Flanagan wrote:
Even changing the argument names to neutral a,b,c,d,dx,dy would be
better than what is there currently.

Done.


Thanks


On Mon, 19 Jul 2010, David Flanagan wrote:
While I'm harping on the transform() method, I'd like to point out that
the current spec text "must multiply the current transformation matrix
with the matrix described by..." is ambiguous because matrix
multiplication is not commutative.  Perhaps an explicit formula that
showed the order would be clearer.

Furthermore, if the descriptions for translate(), scale() and rotate()
were to altered to describe them in terms of transform() that would
tighten things up.

Could you describe what interpretations of the current text would be valid
but would not be compatible with the bulk of existing implementations? I'm
not sure how to fix this exactly. (Graphics is not my area of expertise,
unfortunately. I'm happy to apply any proposed text though!)


I think that the sentence "The transformations must be performed in reverse order" is sufficient to remove the ambiguity in multiplication order. So the spec is correct (but confusing) as it stands, except that it doesn't actually say that the CTM is to be replaced with the product of the CTM and the new matrix. It just says multiply them.

I suggest changing the description of transform() from:

must multiply the current transformation matrix with the matrix described by:

To something like this:

must set the current transformation matrix to the matrix obtained by postmultiplying the current transformation matrix with this matrix:

a c e
b d f
0 0 1

That is:

             a c e
CTM = CTM *  b d f
             0 0 1

Changing translate(), scale() and rotate() to formally define them in terms of transform() would be simple, and the current prose descriptions of the methods could then be moved to the non-normative green box. The current descriptions suffer from the use of the word "add" near the word "matrix" when in fact a matrix multiplication is to be performed, but I don't think they can be mis-interpreted as they stands. I'd be happy to write new method descriptions if you want to tighten things up in this way, however.

        David

Reply via email to