我有一个带有旋转和平移变换的System.Drawing.Drawing2D.Matrix,我需要将其应用于精灵。不幸的是,旋转原点位于精灵的左上角。
如何将旋转原点更改为精灵的中心?
答案 0 :(得分:3)
目前你的变换矩阵包含一个旋转(原点左上角),乘以一个平移(从原来的左上角到新的左上角)。
要更改旋转的原点,您需要先进行另一次翻译:
平移(半边宽度,半高度)以使对象居中 然后旋转(现在以精灵的中心为中心) 然后是最后的翻译(加上你在第一阶段起飞的一半和一半高度)。
答案 1 :(得分:2)
还有一个RotateAt()
方法,您可以使用它来指定所需的原点。
只需在你想要原点的参数中传递一个PointF
结构。
答案 2 :(得分:0)
不幸的是,提议的解决方案都不适用于我。它们似乎是一个很好的解决方案,可能会在另一种情况下工作,但不是我的情况。
然而,我找到了一个有效的解决方案:
我已将矩阵的OffsetX和OffsetY字段的值更改为:
OffsetX = OffsetX - M11 * hx - M21 * hy + hx;
OffsetY = OffsetY - M12 * hx - M11 * hy + hy;
hx 是半宽, hy 是精灵的一半高度,M11,M12和M21是相应的矩阵字段。