From: Carsten N. <car...@gm...> - 2014-08-20 08:07:59
|
Hello Michael, On 08/15/2014 07:45 PM, Michael Raab wrote: > Am 15.08.2014 16:51 schrieb Carsten Neumann <car...@gm...>: >> assuming that recombining this back into matrices yields the starting >> matrices (i.e. it is not a bug in the decomposition) this would be >> caused by a degree of freedom in the algorithm. > > Does it really produce the initial Matrix? Haven't tested this... > >> I can think of the following options: >> - figure out where this degree of freedom is and make choose the scale >> orientation more consistently. > > Sorry I don't understand this.. > >> - can you use a ComponentTransform instead of a plain Transform and only >> modify the individual components. That would make the decomposed form >> the canonical representation and only build the matrix from those. > > That is not an option as the matrix is the result of a sequence of transformations. > >> - can you make assumptions about the matrix, e.g. is it composed from >> translation, rotation, and (uniform) scale only? > > Unfortunately not. The only assumption I can think of is that the scale should be applied without any additional scale orientation. > Usually I think of transformation matrices as a combination of the 3 components translation, rotation and scale. Actually I do not know where the scale orientation is necessary or useful. the problem with that is that if your sequence of transformations contains a scale, a rotation and another scale (i.e. M = S * R * Z) you can not really find a rotation R' and scale S' such that M = R' * S': (s_x ) (r_xx r_xy r_xz ) S = ( s_y ) R = (r_yx r_yy r_yz ) ( s_z ) (r_zx r_zy r_zz ) ( 1) ( 1) ( s_x z_x r_xx | s_x z_y r_xy | s_x z_z r_xz | ) S * R * Z = ( s_y z_x r_xx | s_x z_y r_xy | s_y z_z r_xz | ) ( s_z z_x r_xx | s_z z_y r_xy | s_z z_z r_xz | ) ( | | | 1) In R' * S' the columns of the rotation are all scaled by the same factor, while in S * R * Z every row and column has its individual scale factor (s_* z_*). The two scaling operations S and Z happen along different axis. It is possible to find a rotation (call it SR) and new scaling factors S'' such that this 'complicated scaling along different axis' can again be represented as scaling along the canonical axis' in that rotation (!) - that is the product S * R * Z can be written: R' * SR * S'' * SR^-1 where R' is a rotation and S'' is a scaling matrix, SR is a rotation (into a coordinate system where we can scale along the canonical axis) - the scale orientation. Hope this makes some sense and that I got it right ;) Cheers, Carsten |