public static Matrix ComposeTransform(Matrix.Decomposed decomposed) { // According to https://www.w3.org/TR/css-transforms-1/#recomposing-to-a-2d-matrix return(Matrix.Identity .Prepend(Matrix.CreateTranslation(decomposed.Translate)) .Prepend(Matrix.CreateRotation(decomposed.Angle)) .Prepend(Matrix.CreateSkew(decomposed.Skew.X, decomposed.Skew.Y)) .Prepend(Matrix.CreateScale(decomposed.Scale))); }
public static Matrix.Decomposed InterpolateDecomposedTransforms(ref Matrix.Decomposed from, ref Matrix.Decomposed to, double progress) { Matrix.Decomposed result = default; result.Translate = InterpolateVectors(from.Translate, to.Translate, progress); result.Scale = InterpolateVectors(from.Scale, to.Scale, progress); result.Skew = InterpolateVectors(from.Skew, to.Skew, progress); result.Angle = InterpolateScalars(from.Angle, to.Angle, progress); return(result); }
private static bool ComputeDecomposedTransform(TransformOperations operations, int startOffset, out Matrix.Decomposed decomposed) { Matrix transform = operations.ApplyTransforms(startOffset); if (!Matrix.TryDecomposeTransform(transform, out decomposed)) { return(false); } return(true); }