2

我在里面找到以下代码PAffineTransform

/**
     * Scales the transform about the given point by the given scale.
     * 
     * @param scale to transform the transform by
     * @param x x coordinate around which the scale should take place
     * @param y y coordinate around which the scale should take place
     */
    public void scaleAboutPoint(final double scale, final double x, final double y) {

        //TODO strange order

        translate(x, y);
        scale(scale, scale);
        translate(-x, -y);
    }

做反向不是正确的:

        translate(-x, -y);
        scale(scale, scale);
        translate(x, y);

所有使用的方法都与中相同AffineTransform

更新

我的错。

顺序变换修改是指从右边开始的矩阵乘法。因此,最后应用的修改在变换时首先起作用,因为变换是从左边开始的矩阵乘法。

4

1 回答 1

1

in 的顺序PAffineTransform与 Piccol2D 中的每个节点都有一个仿射变换有关,该仿射变换定义了该节点的局部坐标系。

通常,要围绕特定点进行缩放,首先要平移对象,使该点位于原点。然后,您执行缩放,然后执行原始平移的倒数,以将固定点移回其原始位置。

PNode有自己的局部坐标系,原点位于 (0, 0)。所以当scaleAboutPoint()在节点上执行时,定义的顺序PAffineTransform是有意义的。首先,平移到该点,使其成为新的原点,然后缩放,然后反转平移。

于 2013-11-15T18:19:29.610 回答