仿射变换 - 围绕点进行缩放

7

我正在尝试在Java中围绕某个点缩放形状。

使用AffineTransform.scale方法时,它是以左上角为基准进行缩放的。有没有办法以一个点为锚点进行缩放(比如说窗口的中心点)。

谢谢,

Ty


1
翻译--缩放--再翻译回来。 - Hovercraft Full Of Eels
我不知道我的对象有多大,所以我如何确定要翻译多少? - Ty Rozak
你必须知道中心相对于左上角的位置,否则我觉得你就没戏了。 - Hovercraft Full Of Eels
1
一个 Component c 的中心点坐标为 (c.getWidth()/2, c.getHeight()/2) - Lone nebula
1个回答

5

我同意Hovercraft Full of Eels的观点,正确的方法是将中心移动到左上角进行翻译,然后缩放,最后将左上角移回中心。

但是,如果您想在少于三个步骤内完成操作,可以使用以下变换:

x ⟼ S(x – c) + c = Sx + (c – Sc),

其中S是缩放变换,c是相对于左上角坐标系的中心。

因此,您需要先进行缩放,然后通过c - Sc进行平移。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接