# Affine transforms - matrix algebra

Pavel Safrata pavel.safrata at oracle.com
Thu Jul 12 14:00:59 PDT 2012

```Better names might be MAT_2x3, MAT_3x4, MAT_4x4.
Pavel

On 12.7.2012 22:48, Pavel Safrata wrote:
>
> On 12.7.2012 22:07, Martin Desruisseaux wrote:
>> Le 12/07/12 19:42, Pavel Safrata a écrit :
>>> Even in this case I don't really like the inconsistency with List
>>> which allocates new array if the given one is not sufficient. I
>>> think we either need to choose one of the numbers or do
>>>
>>> public double[] toArray(MatrixArrayType type[, double[] a)
>>>
>>> where MatrixArrayType is an enum with values MAT_2D, MAT_3D,
>>> MAT_Full, requesting 6, 12, 16 numbers respectively. How does that
>>> sound?
>>
>> Maybe I lack a little bit of JavaFX knowledge here, but how do we
>> known for which axes are the 2D-relevant elements? Do the (x,y) plane
>> is special enough in the JavaFX infrastructure for stating that the
>> Affine 2D elements will never be (x,z) or (y,z)? Otherwise instead of
>> MAT_2D we could define MAT_XY, MAT_XZ and MAT_YZ.
>
> In JavaFX the (x,y) plane is very special. If you use the scene in 2D
> you always work with the (x,y) plane. Any transform along z axis is
> considered 3D.
>
>>
>> But maybe there is an other issue: when I look at the matrices
>> documented in the javadoc of every Transform subclasses except Affine
>> (and maybe Rotate when the axis of rotation is not Z), I see X and Y
>> axes that are independent of Z (i.e. the coefficients in the third
>> column are zero for the first (X) and second (Y) rows). It make sense
>> for those Transforms to extract a sub-transform for only the (x,y)
>> plane, because transformations on that plane do not depend on the z
>> value.
>>
>> But in the Affine class, the mxz and myz coefficients can be
>> anything. Consequently the transformations on the (x,y) plane may not
>> be independent of z. If we extract the 2D part of that matrix, we
>> would need to specify in the javadoc that this two-dimensional
>> transform is valid only for z=0. For other values of z, the
>> translation terms of the two-dimensional transform may be different.
>> Do we really want to afford this additional complexity?
>
> I would probably leave responsibility on users. I think we could even
> throw an exception when user tries to obtain 2D matrix from a 3D
> transform.
>
> Pavel
>
>>
>>     Martin
>>
>
>

```