改变矩阵变换的变换原点

时间:2011-03-07 10:21:07

标签: c# matrix

我有一个带有旋转和平移变换的System.Drawing.Drawing2D.Matrix,我需要将其应用于精灵。不幸的是,旋转原点位于精灵的左上角。

如何将旋转原点更改为精灵的中心?

3 个答案:

答案 0 :(得分:3)

目前你的变换矩阵包含一个旋转(原点左上角),乘以一个平移(从原来的左上角到新的左上角)。

要更改旋转的原点,您需要先进行另一次翻译:

平移(半边宽度,半高度)以使对象居中 然后旋转(现在以精灵的中心为中心) 然后是最后的翻译(加上你在第一阶段起飞的一半和一半高度)。

答案 1 :(得分:2)

还有一个RotateAt()方法,您可以使用它来指定所需的原点。  只需在你想要原点的参数中传递一个PointF结构。

http://msdn.microsoft.com/en-us/library/awacs0xh.aspx

答案 2 :(得分:0)

不幸的是,提议的解决方案都不适用于我。它们似乎是一个很好的解决方案,可能会在另一种情况下工作,但不是我的情况。

然而,我找到了一个有效的解决方案:
我已将矩阵的OffsetX和OffsetY字段的值更改为:

OffsetX = OffsetX - M11 * hx - M21 * hy + hx;
OffsetY = OffsetY - M12 * hx - M11 * hy + hy;

hx 是半宽, hy 是精灵的一半高度,M11,M12和M21是相应的矩阵字段。