C# 更改矩阵变换的变换原点

C# 更改矩阵变换的变换原点,c#,matrix,C#,Matrix,我有一个System.Drawing.Drawing2D.Matrix,带有旋转和平移变换,我需要将其应用于精灵。不幸的是,旋转原点位于精灵的左上角 如何将旋转原点更改为精灵的中心?此时,变换矩阵由旋转(原点左上角)乘以平移(从原始左上角到新左上角)组成 要更改旋转原点,需要先进行另一次平移: 平移(-一半宽度,-一半高度)使对象居中 然后旋转(现在以精灵的中心为中心) 然后是最后的翻译(加上你在第1阶段起飞的一半高度和一半高度) 还有一个RotateAt()方法,可用于指定所需的原点。 只需在

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


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

此时,变换矩阵由旋转(原点左上角)乘以平移(从原始左上角到新左上角)组成

要更改旋转原点,需要先进行另一次平移:

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

还有一个
RotateAt()
方法,可用于指定所需的原点。 只需在希望原点所在的参数中传递一个
PointF
结构


不幸的是,所有建议的解决方案都不适合我。它们似乎是一个很好的解决方案,可能会在其他场景中起作用,但在我的情况下不会

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

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

其中hx是半宽,hy是sprite的半高,M11、M12和M21是对应的矩阵字段。

Hi graycrow,我也面临同样的问题。应用转换时,所有图形都位于左上角。如果我正确地设置原点,那么它就会正确地出现。如何设置原点。我有左、上、下和右的图形对象。你能告诉我怎么做吗?即使在事实发生后也设置原点。你能解释一下这是怎么做到的吗?