统一缩放特定点

时间:2014-08-25 08:10:47

标签: java c# scaling graphics2d

我需要使用(x,y)乘法(例如此处说明的乘法)在特定点上以均匀比例缩放对象:

http://www.willamette.edu/~gorr/classes/GeneralGraphics/Transforms/transforms2d.htm#Combining

我目前面临的问题是,每当我尝试使用某个系数(对于X和Y都相等)缩放对象时,对象会被某个值向右推。我想阻止这个发生了,我明白这个问题的解决方案是在实际缩放对象之前从(X,Y)中减去一个值,但是我无法找到正确的值。在上面的教程中它被解释为这个

  

我们看到基本的缩放和旋转变换始终与原点有关。要围绕特定点(固定点)缩放或旋转,我们必须首先翻译对象,使固定点位于原点。然后,我们执行缩放或旋转,然后执行原始平移的倒数,以将固定点移回其原始位置。例如,如果我们想要在每个方向上围绕点fp =(1.5,1)将三角形缩放2,我们首先将三角形的所有点平移T =( - 1.5,-1),缩放2( S),然后转换回-T =(1.5,1)。在数学上看起来像

它们是什么意思起源?这是否意味着(0,0),如果是,那么乘以不会乘以零而没有得到任何结果?这并不意味着&# 39;为什么我怀疑我必须拿这个数字,我只用一个动作减去。

提前致谢。

编辑:这是对任何可能在将来搜索它的人所解释的问题的答案,因为我在互联网上找不到令人满意的解释(不包括我没有做过的可能的解释)。即使通过我充分搜索也能找到)

因此,一般情况下,如果您希望在点(X,Y)处缩放比例(X = 10,Y = 15)并且比例因子为10,则必须执行以下步骤: 1)找到物体当前所在平面的中心。对于我们的情况,这将是(10,15)点。 2)对于要应用缩放的每个对象,从对象的X点中减去中心点的X值,对Y进行相同的处理(I' m使用中心点因为我希望它是统一规模点)。 3)将比例因子乘以操作的结果(在我们的例子中为10)。

2 个答案:

答案 0 :(得分:1)

在缩放之前要从所有坐标中减去的值是您不希望通过缩放操作移动的对象的点。通常,如果适用,这是中心点。通过减去中心点,它将被映射到坐标空间原点,因此不受缩放的影响。

你的对象的所有其他点仍然被移动,因为它们被映射到(0,0)以外的点。

答案 1 :(得分:1)

是,原点是坐标系的(0,0)点。但是为什么会导致乘以0?

您只需先移动(平移)对象,使其位于坐标系的中心。然后用一个因子缩放它,然后将它移回原来的位置。

如果您想进行报价中描述的操作,那么对于对象的每个点,您首先要通过 T 进行翻译(其中 T 是您所在的点)想要缩放),然后将结果的每个分量乘以相应的缩放因子 S 。然后使用 -T 移动新点。