【发布时间】:2020-07-22 09:45:33
【问题描述】:
我需要代码来计算缩放、旋转、平移和倾斜分量的二维变换矩阵。
代码应该像这个计算器一样工作:http://angrytools.com/css-generator/transform,我试图理解下面的解释,但我数学不好。
这是我正在尝试实现的转换器的示例代码。
public class TransformationMatrix2D
{
public double A { get; set; }
public double B { get; set; }
public double C { get; set; }
public double D { get; set; }
public double TX { get; set; }
public double TY { get; set; }
}
public class TransformationMatrix2DCalculator
{
public (double X, double Y) Translate { get; set; }
public double Rotate { get; set; }
public (double X, double Y) Scale { get; set; }
public double Skew { get; set; }
private const double TransformDegrees = 180 / Math.PI;
public TransformationMatrix2DCalculator(double translateX = 0, double translateY = 0, double rotate = 0, double scaleX = 1, double scaleY = 1, double skew = 0)
{
Translate = (translateX, translateY);
Rotate = rotate;
Scale = (scaleX, scaleY);
Skew = skew;
}
public TransformationMatrix2D Matrix => null; //TODO: to be implemented
}
更新
我找到了如何应用旋转、平移和缩放,但我不知道如何应用倾斜:
public TransformationMatrix2D GetMatrix()
{
var angle = Rotate / TransformDegrees;
var a = Math.Cos(angle) * Scale.X;
var b = Math.Sin(angle) * Scale.X;
var c = -Math.Sin(angle) * Scale.Y;
var d = Math.Cos(angle) * Scale.Y;
//TODO: complete transformations (skew support is missing)
return new TransformationMatrix2D()
{
A = a,
B = b,
C = c,
D = d,
TX = Translate.X,
TY = Translate.Y
};
}
【问题讨论】: