【问题标题】:Uniform scaling a particular point统一缩放特定点
【发布时间】:2014-08-25 08:10:47
【问题描述】:

我需要使用 (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),如果是,那么乘以不会乘以零并且没有得到任何结果吗?这没有任何意义,这就是为什么我怀疑我必须取我从一个动作中减去的这个数字。

提前致谢。

编辑:这是为任何可能在未来搜索它的人解释的问题的答案,因为我在互联网上没有找到令人满意的解释(不包括我什至没有找到的可能的解释)我充分搜索)

所以一般来说,如果您想在 (X,Y) 点进行缩放,说它 (X = 10,Y = 15) 的比例因子为 10,您必须执行以下步骤: 1)找到对象当前所在平面的中心。对于我们的例子,这将是(10,15)点。 2)对于您应用缩放以从对象的 X 点减去中心点的 X 值的每个对象,Y 也是如此(我使用中心点是因为我希望它是统一的缩放点)。 3)将运算结果乘以比例因子(在我们的例子中为 10)。

【问题讨论】:

    标签: java c# scaling graphics2d


    【解决方案1】:

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

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

    【讨论】:

    • 好的,这个解释对我来说已经足够了,我理解了这个概念。谢谢!
    【解决方案2】:

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

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

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

    【讨论】:

    • 感谢 Dirk 的回答,您的回答和我接受的差不多。
    猜你喜欢
    • 1970-01-01
    • 2016-01-05
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多