改变边界后矩形的矩阵变换

时间:2014-03-29 15:58:14

标签: c# winforms graphics matrix transform

我有一个形状,例如一个具有以下范围的Rectangle:

X = 100
Y = 100
Width = 100
Height = 100

我使用新的Matrix

将以下旋转应用于此矩形
X = 100
Y = 100
Angle = 45

var transform = new Matrix();
transform.RotateAt(angle, point);

因此新Matrix具有以下值:

0.7071068, 0.7071067, -0.7071067, 0.7071068, 150, -62.13202

当我使用Graphic绘制矩形时使用此矩阵:

protected override void OnPaint(PaintEventArgs e)
{
    ...
    e.Graphic.Transform = transform;
    g.DrawRectangle(Pen, bounds.X, bounds.Y, bounds.Width, bounds.Height);
}

问题如下:在某一点上,我需要绘制相同的矩形但是移动了一定的偏移量,例如(50,50)。我已经存储了Matrix变换和Rectangle边界。如果我只改变边界(添加偏移量),新的矩形将被绘制在错误的位置,可能是由于前一个旋转点。

如何更改矩阵以便在“正确”位置绘制矩形?也就是说,我该如何检索正确的旋转点和旧的旋转角度?

1 个答案:

答案 0 :(得分:0)

尝试使用MatrixOrder.Prepend将翻译添加到矩阵中 对于偏移(50, 50),它将是:

transform.Translate(50, 50, MatrixOrder.Prepend);

或者为这种情况创建一个单独的矩阵:

var transformWithOffset = new Matrix();
transformWithOffset.Translate(50, 50);
transformWithOffset.RotateAt(angle, point);